我想使用WebClient
的现有实例来下载图片。原因是因为我希望cookie随请求一起传递。
如何使用WebClient
的现有实例
另外,我如何使用data:image/jpeg;base64,...
当前代码:
WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6);
UnexpectedPage imagePage = client.getPage("http://...");
String imageString = imagePage.getWebResponse().getContentAsString();
BASE64Encoder encoder = new BASE64Encoder();
String base64data = encoder.encode(imageString.getBytes());
所以现在我有了图像的base64数据,但我仍然无法使用data:image/jpeg;base64,...
查看图像。
答案 0 :(得分:1)
需要考虑的几件事情:
BASE64Encoder()
生成一个字符串,每隔77个字符包含换行符。使用.replaceAll("\r?\n","")
。InputStream
而不是字符串。另外,要将其转换为byte
数组,我使用了一种实用工具方法(可以找到源代码和其他选项here)。工作源代码:
public static void main (String args[]) throws IOException {
WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6);
UnexpectedPage imagePage = client.getPage("http://i.stack.imgur.com/9DdHc.jpg");
BASE64Encoder encoder = new BASE64Encoder();
String base64data = encoder.encode(inputStreamToByteArray(imagePage.getWebResponse().getContentAsStream()));
System.out.println("<img src=\"data:image/png;base64,"+base64data.replaceAll("\r?\n","")+"\" />");
}
private static byte[] inputStreamToByteArray(InputStream is) throws IOException {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[16384];
while ((nRead = is.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, nRead);
}
buffer.flush();
return buffer.toByteArray();
}
来源图片:
输出base64图像 here 。