使用httpclient进行文件下载
使用httpclient进行文件下载获取文件名获取方式
先从返回头的content-Disposition中获取,如果没有再从下载的Url中获取。
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;import java.io.*;
import java.net.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;@Slf4j
public class FilesUtils {private final static Pattern pattern = Pattern.compile(".*fileName=(.*)");/*** 文件下载** @param httpUrl 下载的url* @return*/public static FileMetaInfoDTO downLoadFromUrl(String httpUrl) throws IOException {File file = null;FileMetaInfoDTO fileMetaInfoDTO = null;try {// 统一资源URL url = new URL(httpUrl);// 连接类的父类,抽象类URLConnection urlConnection = url.openConnection();// http的连接类HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;// 设定请求的方法,默认是GEThttpURLConnection.setRequestMethod("GET");// 设置字符编码httpURLConnection.setRequestProperty("Charset", "UTF-8");urlConnection.setConnectTimeout(MccConfigUtil.getDonwLoadTimeOut());// 打开到此 URL 引用的资源的通信链接(如果尚未建立这样的连接)。httpURLConnection.connect();String suffix = getSuffix(httpUrl);if (StringUtils.isEmpty(suffix)) {suffix = ".tmp";}file = File.createTempFile("httpdonwFile", suffix);BufferedInputStream bin = new BufferedInputStream(httpURLConnection.getInputStream());if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}FileOutputStream out = new FileOutputStream(file);int size = 0;int len = 0;byte[] buf = new byte[1024];while ((size = bin.read(buf)) != -1) {len += size;out.write(buf, 0, size);}bin.close();out.close();String fileName = tryGetFileName(urlConnection);fileMetaInfoDTO = new FileMetaInfoDTO(fileName, file);} catch (MalformedURLException e) {log.error("downLoad file eror url = {} ", httpUrl, e);} catch (IOException e) {log.error("downLoad file eror url = {} ", httpUrl, e);} finally {return fileMetaInfoDTO;}}private static String tryGetFileName(URLConnection conn) {String contentDisposition = null;try {String disposition = conn.getHeaderField("content-Disposition");if (!StringUtils.isEmpty(disposition)) {contentDisposition = URLDecoder.decode(disposition, "UTF-8");Matcher matcher = pattern.matcher(contentDisposition);return matcher.group(1);} else {String path = conn.getURL().getPath();Integer start = path.lastIndexOf('/') + 1;String fileName = path.substring(start);return URLDecoder.decode(fileName, "UTF-8");}} catch (UnsupportedEncodingException e) {log.error("文件名解析失败 url = {}", conn.getURL(), e);} catch (Exception e) {log.error("文件名解析失败 url = {}", conn.getURL(), e);}return null;}/*** 从输入流中获取字节数组** @param inputStream* @return* @throws IOException*/public static byte[] readInputStream(InputStream inputStream) throws IOException {byte[] buffer = new byte[1024];int len = 0;ByteArrayOutputStream bos = new ByteArrayOutputStream();while ((len = inputStream.read(buffer)) != -1) {bos.write(buffer, 0, len);}bos.close();return bos.toByteArray();}public static String getSuffix(String path) {String suffix = StringUtils.substringAfterLast(path, ".");suffix = StringUtils.substringBeforeLast(suffix, "?");suffix = StringUtils.substringBeforeLast(suffix, "@");return "." + suffix;}@Data
public static class FileMetaInfoDTO {String fileName;File file;public FileMetaInfoDTO(String fileName, File file) {this.fileName = fileName;this.file = file;}public FileMetaInfoDTO() {}
}
}
使用httpclient进行文件下载相关推荐
- Apache HttpClient 客户端使用详解、文件上传、文件下载
目录 HttpClient 概述与下载 Http Get 请求(文件下载) Http POST 请求(文件上传) Http Put 请求 Http Delete 请求 异步执行请求 HttpClien ...
- Java文件下载,提供前端页面下载、HttpClient接口下载
学习Java的文件上传/下载需要先明白一下几点: 1.下载的资源,有两种: 1).本地文件:即项目运行时可访问的文件目录,比如,在本机Idea中运行一个 fileServer,那么 fileServe ...
- apache httpclient 工具类_Httpclient实现文件上传、文件下载看这篇文章就够了
前言: 使用httpclient实现文件的上传下载,废话补不多说,直接上概念上代码. 1.相关概念: 1 HTTP HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 ...
- android+网络下载资源,【已解决】Android中利用HttpClient等库实现网络文件下载
[问题] 已经获得了Songtaste中歌曲的地址,比如: 中的真实下载地址是: 然后现在想要去下载这样的文件到Android手机的本地某个文件夹中. [解决过程] 1.其中,关于自动处理Cookie ...
- servlet httpClient 下载远程文件
通过webService调用远程服务,返回了一个文件下载地址,现在需要从这个下载地址下载,我采用了servlet来实现.在网上发现了一个比较好的方法,现在和大家分享一下,如果有不完善的地方,还请多多指 ...
- Spring MVC 文件上传 文件下载
索引: 目录索引 参看代码 GitHub: pom.xml WebConfig.java index.jsp upload.jsp FileUploadController.java Files_Ut ...
- httpclient base64 文件上传_代码级别的上传下载神器
前言 不知道大家在工作中有没有碰到过在代码级别中进行上传和下载呢,一般的场景为调用第三方的接口进行上传大文件和下载大文件. 我一个小伙伴最近在工作中就碰到了,他需要在代码中调用第三方http接口进行原 ...
- 【C#】【HttpClient】下载网络文件
通过 HttpClient 下载网络文件 前言:之前有需求从某个网站自动下载其文件.而事先我是没有这方面的开发经验的.找了许多资料大多是采用 WebClient 类进行网络文件的获取.然而我去 MSD ...
- 丢弃 HttpClient 了,这款轻量级框架更强!
大家好,我是宝哥! 一.Forest 1.1 业务需求 一般情况下是后端提供接口,前端调用,解决需求,但是有的时候为了方便,复用别人的接口(网上的,公共的第三方接口(短信.天气等)),就出现了后端调用 ...
- java实现远程文件下载
转自JAVA 实现远程文件下载 相信很多同学在实际的项目开发中都会遇到一个问题,如何跨服务下载文件?在传统SSH, SSH2, SSM架构中可能很少遇到这样的问题,但是在当前逐渐流行的微服务架构中,这 ...
最新文章
- Extmail + Postfix on Debian5
- 皮一皮:是不是年轻时候的你...
- 多线程的基本概念 (什么是cpu)
- 二、前端开发-HTML
- 检测某个IP是否属于某个网段范围
- linux sqlserver_SQL Server 与 MySQL存储引擎
- 宏定义 是否retina高清屏,判断当前设备
- 骁龙845手机破罐子破摔!小米8最惨降价:直降1200
- 使用tensorflow-serving部署tensorflow模型
- nyoj412 Same binary weight(bitset类运用)
- 信息学奥赛一本通题解
- 大一计算机php认证考试,2017年计算机基础大一考试试题【附答案】.doc
- 制作软件工程师风格的qq头像
- 如何解决Python 爬取网易云评论为[ ]的问题
- 华为云学院-人人学loT学习笔记- 第五章 操作系统 轻量开源
- html页面悬浮提示框,js实现页面悬浮框
- 在github上写脚注的方法 markdown
- 图像二值化方法及适用场景分析(OTSU Trangle 自适应阈值分割)
- 无插件纯Web HTML5 3D机房 进阶篇(新增设备、线缆、巡查等功能)
- 无法解压文件请重新启动计算机,为什么rar文件无法解压,显示数据错误,文