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();
                }
          }
}

 

原文地址:https://www.cnblogs.com/wpy123/p/10162900.html

时间: 2024-08-29 08:11:04

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

从七牛服务下载PDF文件

/** * 从七牛下载PDF文件 * @param request * @param response * @param exhiId * @throws MalformedURLException */ @RequestMapping("/loadCanZhanHan") public void downloadNet(HttpServletRequest request, HttpServletResponse response,String exhiId) throws Malf

Servlet流操作——在浏览器中打开或者下载PDF文件

在Servlet与客户的请求应答的过程中,底层是通过输入/输出流来实现的.Servlet支持两种格式的输入/输出流.一个是字符输入/输出流.ServletResponse的getWriter()方法返回一个PrintWriter对象,Servlet可以利用PrintWriter来输出字符流形式的正文数据.另一种是字节输入/输出流.ServletResponse的getOutputStream()方法返回一个ServletOutputStream对象,Servlet可以利用ServletOutpu

使用php下载的文件打不开,自己用着没问题,客户用就不行?

1 现象: 开发的时候用的好好的文件下载功能,部署到客户那边就不好使了,几乎所有从服务器下载下来的文件都不能打开. 比较了上传前的文件.上传后服务器端的文件.下载后本机的文件,发现同一个文件,上传后还好好的,通过PHP下载下来就多了3个字节. 使用uediter用16进制模式打开文件发现文件头部多了“EF BB BF”这三个字节. 2 分析: 上网很容易查到这三个字节叫bom头,windows用来标识这是个utf8格式的文件. 一开始很容易想岔,比如在下载文件的时候删除这个bom头.比如强制wi

前端实现下载pdf文件

1 async downloadFun() { // 下载使用说明书 2 const InstructionManualvv = await InstructionManual(); 3 4 let blob = new Blob([InstructionManualvv.data], {type: 'application/pdf;charset=UTF-8'}); 5 let fileName = '使用说明书.pdf'; 6 if (window.navigator.msSaveOrOpe

Java HttpURLConnection 下载图片 图片全是“加密图片”文字,怎么解决?

package com.qzf.util; import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL; public class ReadMdImg { public static void main(

用apache做为代理下载本地pdf文件

有一些公司会用apache做为代理,下载服务器上的pdf文件.以下是apache做为代理的配置 一. 环境 centos6.5  192.168.69.3 二. yum安装apache 服务 [[email protected] ~]$ rpm -qa httpd    //查看是否有rpm包安装的apache服务httpd-2.2.15-60.el6.centos.5.x86_64 [[email protected] ~]$ rpm -e httpd-2.2.15-60.el6.centos

Android 如何本地加载pdf文件

大部分app打开pdf文件是通过intent调起手机中能打开pdf文件的工具,来查看pdf文件,如果需求是,用户在app内下载好pdf文件后,不通过第三方的工具,本地打开. 这样的需求要怎么实现呢?上网查了一些资料,发现了一个很好用PDF开源库. 使用起来也很简单,首先添加PDFView的引用 compile 'com.github.barteksc:android-pdf-viewer:2.4.0' 布局中引用PdfView <LinearLayout xmlns:android="ht

一键解决pdf文件太大如何变小的难题

PDF文件是适用于文件下发,阅读等便捷的电子文件格式,在传输发送的过程中,我们PDF文件较大的情况下,就需要将PDF文件压缩,那么PDF文件太大如何变小呢?对于PDF文件压缩不是太了解的用户可能就想不到好的办法解决,本文将教大家一键解决pdf文件太大如何变小的难题. 1.首先,我们需要了解的是PDF文件进行压缩,我们这里是需要借助到一款叫作迅捷PDF转换器的软件,所以,现在需要做的就是打开浏览器,在电脑上下载安装.软件下载:pdf压缩器http://www.newasp.net/soft/213

随心所欲导出你的 UI 界面到 PDF 文件

使用 C1PDF 控件可以导出文件到 PDF 文件,结合 .NET 平台特性你可以在任何客户端生成自定义报表.你可以打印任何 UI 界面,例如 DataGrid 导出到 PDF. 在本篇文章中我们将阐述在 XAML 平台中打印 UI 到 PDF 文件的通用方法. 打印 UI 界面到 PDF 文件,需要首先把 UI 界面导出到图片,然后把图片添加到 PDF 文件中.面让我们来进入实战部分. 导出UI到图片 UI导出到 PDF 文件,最简单明了的方法是把 UI 界面作为图片插入到 PDF 文件中.每