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

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

目前负责的项目遇到下载 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 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3169 引用 • 8207 回帖 • 1 关注
  • PDF
    26 引用 • 36 回帖 • 1 关注
  • HTTP
    75 引用 • 127 回帖 • 1 关注
  • HTTPS
    98 引用 • 271 回帖 • 3 关注

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 一些有用的避坑指南。

    69 引用 • 93 回帖 • 2 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    284 引用 • 247 回帖 • 173 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    164 引用 • 1456 回帖
  • 脑图

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

    21 引用 • 58 回帖
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 5 关注
  • API

    应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    76 引用 • 421 回帖
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1083 引用 • 3461 回帖 • 286 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 592 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    129 引用 • 793 回帖 • 1 关注
  • abitmean

    有点意思就行了

    24 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 1 关注
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    59 引用 • 29 回帖 • 22 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 8 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 545 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    116 引用 • 99 回帖 • 267 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 394 关注
  • OnlyOffice
    4 引用 • 17 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 7 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 635 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 23 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1056 回帖 • 1 关注
  • 反馈

    Communication channel for makers and users.

    123 引用 • 906 回帖 • 193 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    25 引用 • 217 回帖 • 159 关注
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 131 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 595 关注
  • 负能量

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

    85 引用 • 1201 回帖 • 448 关注