httpurlconnection下载pdf文件打不开的原因,和解决代码

前几天遇见一个问题,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(); } } }

 

猜你喜欢

转载自www.cnblogs.com/wpy123/p/10162900.html