我正在尝试使用 HttpClient 下载 PDF 文件,它正在下载 PDF 文件,但页面是空白的。如果我打印它们,我可以从响应中看到控制台上的字节。但是当我尝试将其写入文件时,它会生成一个空白文件。
FileUtils.writeByteArrayToFile(new File(outputFilePath), bytes);
然而,该文件按预期显示了正确的大小 103KB 和 297KB,但它只是空白!!
我也尝试过输出流:
FileOutputStream fileOutputStream = new FileOutputStream(outFile);
fileOutputStream.write(bytes);
还尝试使用 UTF-8 编码进行编写,例如:
Writer out = new BufferedWriter( new OutputStreamWriter(
new FileOutputStream(outFile), "UTF-8"));
String str = new String(bytes, StandardCharsets.UTF_8);
try {
out.write(str);
} finally {
out.close();
}
没有什么对我有用。任何建议都将受到高度赞赏..
更新:我正在使用 DefaultHttpClient。
HttpGet httpget = new HttpGet(targetURI);
HttpResponse response = null;
String htmlContents = null;
try {
httpget = new HttpGet(url);
response = httpclient.execute(httpget);
InputStreamReader dataStream=new InputStreamReader(response.getEntity().getContent());
byte[] bytes = IOUtils.toByteArray(dataStream);
...
最佳答案
你愿意
InputStreamReader dataStream=new InputStreamReader(response.getEntity().getContent());
byte[] bytes = IOUtils.toByteArray(dataStream);
正如评论中已经提到的,使用 Reader
类可能会损坏二进制数据,例如PDF 文件。因此,您不应将内容包装在 InputStreamReader
中。
由于您的内容可用于构造 InputStreamReader
,因此我假设 response.getEntity().getContent()
返回一个 InputStream
>。这样的InputStream
通常可以直接用作IOUtils.toByteArray
参数。
所以:
InputStream dataStream=response.getEntity().getContent();
byte[] bytes = IOUtils.toByteArray(dataStream);
应该已经适合你了!
关于java - 从网上下载pdf后出现空白页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48234176/