前几天遇见一个问题,httpurlconnection发送请求下载pdf文件的时候,文件是下载下来了,但是打不开。
之前并没有对pdf操作的相关功能,所以一直是使用的字符流读取内容。
字符流主要针对一些文本文档(比字节流操作的效率要高),比如.txt、.doc,而pdf就不行。
字节流几乎可以对任何文件类型进行操作,主要是对非文件类型的,如媒体文件(音频,视频,图片…)。
//之前使用reader读取返回内容
BufferedReader reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream(),"UTF-8"));
修改后,可以读pdf文件
//修改为input读取返回内容
BufferedInputStream bin = new BufferedInputStream(httpURLConnection.getInputStream());
整个下载功能代码
package com.myitext.test;import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;/** * Httpurlconnection下载pdf文件 * @author Admin * */public class HttpurlconnectionTest { ??????????????public void downPdf(String urlPath,String content) { ???????????????try { ???????????????????URL url=new URL(urlPath); ???????????????????HttpURLConnection con=(HttpURLConnection)url.openConnection(); ????????????????????????????????????????//设置参数 ???????????????????con.setDoOutput(true); ????//需要输出 POST请求 ???????????????????con.setDoInput(true); ?????//需要输入 ???????????????????con.setUseCaches(false); ??//不允许缓存 ???????????????????con.setRequestMethod("POST"); ?????//设置POST方式连接 ????????????????????????????????????????//设置请求属性 ???????????????????con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); ???????????????????con.setRequestProperty("Connection", "Keep-Alive"); ???????????????????con.setRequestProperty("Charset", "UTF-8"); ????????????????? con.connect(); ????????????????????????????????????????????//建立输入流,向指向的URL传入参数 POST请求 ???????????????????DataOutputStream dos=new DataOutputStream(con.getOutputStream()); ???????????????????dos.writeBytes(content); ???????????????????dos.flush(); ???????????????????dos.close(); ????????????????????????????????????????//获得响应状态 ???????????????????int resultCode=con.getResponseCode(); ???????????????????if(HttpURLConnection.HTTP_OK==resultCode){
//代码修改的主要地方 ??????????????????????????????????BufferedInputStream bin = new BufferedInputStream(con.getInputStream()); ???????????????????????File file = new File("D:/pdf/target.pdf"); ???????????????????????if (!file.getParentFile().exists()) { ???????????????????????????file.getParentFile().mkdirs(); ???????????????????????} ???????????????????????OutputStream out = new FileOutputStream(file);
//如果是reader,size就是String类型了,while循环也要相应的修改 ???????????????????????int size = 0; ???????????????????????byte[] buf = new byte[1024]; ???????????????????????while ((size = bin.read(buf)) != -1) { ???????????????????????????out.write(buf, 0, size); ???????????????????????} ???????????????????????bin.close(); ???????????????????????out.close(); ???????????????????} ????????????????} catch (Exception e) { ???????????????????????????????????????e.printStackTrace(); ???????????????} ?????????}}
httpurlconnection下载pdf文件打不开的原因,和解决代码
原文地址:https://www.cnblogs.com/wpy123/p/10162900.html