推荐文件下载万能通用方式(JAVA实现超级好用)-java下载文件

推荐文件下载万能通用方式(JAVA实现超级好用)

前言

想必做过java开发的同学们都知道,后台系统经常会用到一些文件上传下载之类的功能,在做这些需求的时候往往会遇到很多坑,什么文件下载乱码啊,文件名被浏览器错误识别啊等等,下面是本人总结的一些工作经验,仅以java下载文件源码为例:

附上伪代码:

/**
* response 方式下载文件
* 亲测 chorme firBox exploy 及苹果浏览器均支持
* @param fileName
* @param request
* @param response
*/
@RequestMapping("downLoadFile")
public void getDownLoad(String fileName, HttpServletRequest request, HttpServletResponse response) {
response.reset();
// 设置文件下载的格式 这种是让浏览器自己去识别文件格式
response.setContentType("application/octet-stream");
//文件名 怎么获取就不用多说了吧
String fileName2 = fileName;
try {
String userAgent = request.getHeader("User-Agent");
// name.getBytes("UTF-8")处理safari的乱码问题
byte[] bytes = userAgent.contains("MSIE") ? fileName.getBytes() : fileName.getBytes("UTF-8");
// 各浏览器基本都支持ISO编码
fileName = new String(bytes, "ISO-8859-1");
// 文件名外的双引号处理firefox的空格截断问题
response.setHeader("Content-disposition", String.format("attachment; filename=\"推荐文件下载万能通用方式(JAVA实现超级好用)-java下载文件\"", fileName));
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
InputStream in = null;
OutputStream out = null;
try {
//TODO你只需要在这里获取到你所要下载的文件的输入流

//以下输入流读到输出流中写回浏览器
int len = 0;
byte bys[] = new byte[1024];
out = response.getOutputStream();
while ((len = in.read(bys)) > 0) {
out.write(bys, 0, len);
}
out.close();
out.flush();
//完成 后 关闭流
} catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

总结:

以上仅是我个人在实施过程中的经验代码总结,个人测试各个浏览器都支持,并且已在线上运行1年多,以后遇到类似的需求基本上不需要再查询资料,拿过来就可以用了,如果你绝的有用可以试一下,好用的话收藏,有什么问题可能我个人能力有限,希望大家多多指教,创建这个账号的目的就是记录自己的成长,同时传播个人成长经历,有喜欢的可以关注我,我们互相进步

提示:

文件上传,实时进度监听等,参考:https://www.toutiao.com/i6616979763879739918/

推荐阅读