您的位置 首页 java

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

前言

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

附上 伪代码

/**
 * response 方式下载文件
 * 亲测 chorme firBox exploy 及苹果浏览器均支持
 * @param fileName
 * @param request
 * @param response
 */@RequestMapping("downLoadFile")
public void getDownLoad(String fileName, HttpServlet request  request, HttpServletResponse response) {
response.reset();
// 设置文件下载的格式 这种是让浏览器自己去识别文件格式
response.setContentType("application/octet-stream");
 //文件名 怎么获取就不用多说了吧
String fileName2 = fileName;
try {
String userAgent = request.getHeader("User-Agent");
// name.get bytes ("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=\"%s\"", 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年多,以后遇到类似的需求基本上不需要再查询资料,拿过来就可以用了,如果你绝的有用可以试一下,好用的话收藏,有什么问题可能我个人能力有限,希望大家多多指教,创建这个账号的目的就是记录自己的成长,同时传播个人成长经历,有喜欢的可以关注我,我们互相进步

提示:

文件上传,实时进度监听等,参考:

文章来源:智云一二三科技

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

文章地址:https://www.zhihuclub.com/168944.shtml

关于作者: 智云科技

热门文章

网站地图