前几天遇见一个问题,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(); } } }
原文地址:https://www.cnblogs.com/wpy123/p/10162900.html
时间: 2024-11-10 01:30:46