使用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进行文件下载相关推荐

  1. Apache HttpClient 客户端使用详解、文件上传、文件下载

    目录 HttpClient 概述与下载 Http Get 请求(文件下载) Http POST 请求(文件上传) Http Put 请求 Http Delete 请求 异步执行请求 HttpClien ...

  2. Java文件下载,提供前端页面下载、HttpClient接口下载

    学习Java的文件上传/下载需要先明白一下几点: 1.下载的资源,有两种: 1).本地文件:即项目运行时可访问的文件目录,比如,在本机Idea中运行一个 fileServer,那么 fileServe ...

  3. apache httpclient 工具类_Httpclient实现文件上传、文件下载看这篇文章就够了

    前言: 使用httpclient实现文件的上传下载,废话补不多说,直接上概念上代码. 1.相关概念: 1 HTTP HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 ...

  4. android+网络下载资源,【已解决】Android中利用HttpClient等库实现网络文件下载

    [问题] 已经获得了Songtaste中歌曲的地址,比如: 中的真实下载地址是: 然后现在想要去下载这样的文件到Android手机的本地某个文件夹中. [解决过程] 1.其中,关于自动处理Cookie ...

  5. servlet httpClient 下载远程文件

    通过webService调用远程服务,返回了一个文件下载地址,现在需要从这个下载地址下载,我采用了servlet来实现.在网上发现了一个比较好的方法,现在和大家分享一下,如果有不完善的地方,还请多多指 ...

  6. Spring MVC 文件上传 文件下载

    索引: 目录索引 参看代码 GitHub: pom.xml WebConfig.java index.jsp upload.jsp FileUploadController.java Files_Ut ...

  7. httpclient base64 文件上传_代码级别的上传下载神器

    前言 不知道大家在工作中有没有碰到过在代码级别中进行上传和下载呢,一般的场景为调用第三方的接口进行上传大文件和下载大文件. 我一个小伙伴最近在工作中就碰到了,他需要在代码中调用第三方http接口进行原 ...

  8. 【C#】【HttpClient】下载网络文件

    通过 HttpClient 下载网络文件 前言:之前有需求从某个网站自动下载其文件.而事先我是没有这方面的开发经验的.找了许多资料大多是采用 WebClient 类进行网络文件的获取.然而我去 MSD ...

  9. 丢弃 HttpClient 了,这款轻量级框架更强!

    大家好,我是宝哥! 一.Forest 1.1 业务需求 一般情况下是后端提供接口,前端调用,解决需求,但是有的时候为了方便,复用别人的接口(网上的,公共的第三方接口(短信.天气等)),就出现了后端调用 ...

  10. java实现远程文件下载

    转自JAVA 实现远程文件下载 相信很多同学在实际的项目开发中都会遇到一个问题,如何跨服务下载文件?在传统SSH, SSH2, SSM架构中可能很少遇到这样的问题,但是在当前逐渐流行的微服务架构中,这 ...

最新文章

  1. Extmail + Postfix on Debian5
  2. 皮一皮:是不是年轻时候的你...
  3. 多线程的基本概念 (什么是cpu)
  4. 二、前端开发-HTML
  5. 检测某个IP是否属于某个网段范围
  6. linux sqlserver_SQL Server 与 MySQL存储引擎
  7. 宏定义 是否retina高清屏,判断当前设备
  8. 骁龙845手机破罐子破摔!小米8最惨降价:直降1200
  9. 使用tensorflow-serving部署tensorflow模型
  10. nyoj412 Same binary weight(bitset类运用)
  11. 信息学奥赛一本通题解
  12. 大一计算机php认证考试,2017年计算机基础大一考试试题【附答案】.doc
  13. 制作软件工程师风格的qq头像
  14. 如何解决Python 爬取网易云评论为[ ]的问题
  15. 华为云学院-人人学loT学习笔记- 第五章 操作系统 轻量开源
  16. html页面悬浮提示框,js实现页面悬浮框
  17. 在github上写脚注的方法 markdown
  18. 图像二值化方法及适用场景分析(OTSU Trangle 自适应阈值分割)
  19. 无插件纯Web HTML5 3D机房 进阶篇(新增设备、线缆、巡查等功能)
  20. 无法解压文件请重新启动计算机,为什么rar文件无法解压,显示数据错误,文

热门文章

  1. keil兼容51单片机和arm
  2. 关于在networkx中使用louvain算法报错的问题
  3. 外包IT运维面临的问题及挑战
  4. 极光im java,连接极光异常是什么原因
  5. 高响应比优先算法实例
  6. 项目流程(从立项到结项)
  7. java poi读取word内容
  8. Windows10安装Matlab 2018b教程
  9. 黑群晖数据迁移白群晖(DS 920+)
  10. 黑白群晖 进阶篇 不得不注意的情况