优秀的编程知识分享平台

网站首页 > 技术文章 正文

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

nanyue 2024-08-01 22:50:16 技术文章 8 ℃

前言

想必做过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=\"%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年多,以后遇到类似的需求基本上不需要再查询资料,拿过来就可以用了,如果你绝的有用可以试一下,好用的话收藏,有什么问题可能我个人能力有限,希望大家多多指教,创建这个账号的目的就是记录自己的成长,同时传播个人成长经历,有喜欢的可以关注我,我们互相进步

提示:

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

Tags:

最近发表
标签列表