java 实现 PDF 文件下载到服务器

本贴最后更新于 3077 天前,其中的信息可能已经事过景迁

目前负责的项目遇到下载 pdf 文件到本地的需求,有 http 请求和 https 请求发个帖记录一下!


1.http 请求 pdf 文件地址并下载到本地,别的不太会说,直接粘代码了

package cn.com.test; import java.io.DataInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; import javax.net.ssl.HttpsURLConnection; /** * * @ClassName: HttpDownloaderPDF * @Description: 下载pdf文件到本地 * @author Stone * @date 2016年12月1日 * */ public class HttpDownloaderPDF { String remoteFileUrl = "";//pdf文件请求地址 String localFilePath = "";//本地存放pdf文件路径 public void httpDownloader(String remoteFileUrl, String localFilePath) { try { URL url = new URL(remoteFileUrl); HttpURLConnection httpURLConnection = (HttpsURLConnection) url.openConnection(); httpURLConnection.setConnectTimeout(5 * 1000); // 5000 自定义连接超时毫秒数 httpURLConnection.connect(); // 连接 System.out.println("connect URL success!"); int fileLenght = httpURLConnection.getContentLength(); System.out.println("file size:" + (fileLenght / 1024.0) + " KB"); System.out.println("start the download..."); try (DataInputStream dis = new DataInputStream( httpURLConnection.getInputStream()); FileOutputStream fos = new FileOutputStream(localFilePath)) { byte[] buf = new byte[10240]; // 根据实际情况自定义 buf 大小 for (int readSize; (readSize = dis.read(buf)) > 0;) { fos.write(buf, 0, readSize); } System.out.println("download is complete!"); } catch (IOException ex) { System.out.println("download is error"); } httpURLConnection.disconnect(); } catch (IOException ex) { ex.printStackTrace(); System.out.println("URL Does not exist or connection timeout!"); } } } class PDFTest { public static void main(String[] args) { HttpDownloaderPDF hdl = new HttpDownloaderPDF(); hdl.httpDownloader("requestURL", "/home/Stone/Downloader/file.pdf"); } }

2.有 http 请求就应该考虑 https 请求,还是简单粗暴直接粘代码

package cn.com.test; import java.io.DataInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; import java.security.cert.X509Certificate; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; /** * * @ClassName: HttpDownloaderPDF * @Description: 下载pdf文件到本地 * @author Stone * @date 2016年12月1日 * */ public class HttpDownloaderPDF { /** * 验证证书 */ final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() { public boolean verify(String hostname, SSLSession session) { return true; } }; private static void trustAllHosts() { // 创建信任管理器跃过证书校验 TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return new java.security.cert.X509Certificate[] {}; } public void checkClientTrusted(X509Certificate[] chain, String authType) { } public void checkServerTrusted(X509Certificate[] chain, String authType) { } } }; // 安装 all-trusting 信托管理 try { SSLContext sc = SSLContext.getInstance("TLS"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); } catch (Exception e) { e.printStackTrace(); } } public void httpDownloader(String remoteFileUrl, String localFilePath) { try { trustAllHosts(); URL url = new URL(remoteFileUrl); HttpsURLConnection https = (HttpsURLConnection) url.openConnection(); https.setHostnameVerifier(DO_NOT_VERIFY); HttpURLConnection httpURLConnection = https; httpURLConnection.setConnectTimeout(5 * 1000); // 5000 自定义连接超时毫秒数 httpURLConnection.connect(); // 连接 System.out.println("connect URL success!"); int fileLenght = httpURLConnection.getContentLength(); System.out.println("file size:" + (fileLenght / 1024.0) + " KB"); System.out.println("start the download..."); try (DataInputStream dis = new DataInputStream( httpURLConnection.getInputStream()); FileOutputStream fos = new FileOutputStream(localFilePath)) { byte[] buf = new byte[10240]; // 根据实际情况自定义 buf 大小 for (int readSize; (readSize = dis.read(buf)) > 0;) { fos.write(buf, 0, readSize); } System.out.println("download is complete!"); } catch (IOException ex) { System.out.println("download is error"); } httpURLConnection.disconnect(); } catch (IOException ex) { ex.printStackTrace(); System.out.println("URL Does not exist or connection timeout!"); } } } class PDFTest { public static void main(String[] args) { HttpDownloaderPDF hdl = new HttpDownloaderPDF(); hdl.httpDownloader("requestURL", "/home/Stone/Downloader/file.pdf"); } }

注意:记得在服务器自定义目录下(不要在需要权限的目录下创建,很麻烦还要授权)创建你存文件的文件夹,不然的话程序顺利执行完,但是你要的文件不一定能下载成功!就好比你告诉我,石头哥哥晚上我请你吃饭记得来我家哈!说的挺好听,你不告诉我你家地址和门牌号,我怎么知道去哪里找你,所以啊写程序也得多点儿真诚少点儿套路 0.0

版权声明:本文为本人原创文章,转载请注明出处 java 实现 PDF 文件下载到服务器谢谢!

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3200 引用 • 8216 回帖 • 1 关注
  • PDF
    30 引用 • 45 回帖 • 1 关注
  • HTTP
    75 引用 • 128 回帖 • 1 关注
  • HTTPS
    99 引用 • 274 回帖 • 3 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 自由行
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    89 引用 • 1251 回帖 • 407 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    133 引用 • 1124 回帖 • 109 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    32 引用 • 99 回帖
  • danl
    163 关注
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 117 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    227 引用 • 476 回帖
  • Visio
    1 引用 • 2 回帖 • 1 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    12 引用 • 54 回帖 • 175 关注
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 786 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    21 引用 • 31 回帖
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖 • 1 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 32 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 830 关注
  • JSON

    JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。

    52 引用 • 190 回帖 • 1 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖 • 2 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1441 引用 • 10069 回帖 • 493 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 84 关注
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    165 引用 • 1126 回帖 • 3 关注
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    17 引用 • 53 回帖 • 143 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 648 关注
  • Word
    13 引用 • 41 回帖
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    589 引用 • 3538 回帖
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    345 引用 • 747 回帖