java web 文件下载

文件下载流程

服务器端编码下载原理分析

通过response可以获取输出流,我们将要下载的资源,通过response获取的输出流直接写
回到浏览器端就可以。

服务器端下载两个响应头设置

  • 1,怎样能通知浏览器,下载文件是什么?
    通过response.setContentType设置响应数据的mimeType类型
    获取一个文件的mimeType类型
    ServletContext.getMimeType(String filename)
  • 2, 设置下载文件名称
    response.setHeader("Content-Disposition","attachement;filename=下载名称")

下载乱码问题

对于下载时,我们在显示下载文件名称时,如果包含了中文,就可能出现乱码问题,出现的原因,是对于
不同的浏览器,他们在处理下载文件时的编码不一致,ie浏览器使用的是utf-8编码,而firefox浏览器使用的是base64编码。

response.setCharacterEncoding("utf-8");
String filename = request.getParameter("filename");
String downPath = path+"/upload";
FileInputStream in = new FileInputStream(downPath+File.separator+filename);

if(request.getHeader("user-agent").toLowerCase().contains("msie")){
    filename = URLEncoder.encode(filename, "UTF-8");
}else{
    filename = new String(filename.getBytes("UTF-8"),"iso-8859-1");
}
response.setHeader("content-disposition", "attachment;filename="+filename);
response.setHeader("content-type",this.getServletContext().getMimeType(filename));

OutputStream os = response.getOutputStream();
byte[] buffer = new byte[1024];
int len=0;      
while((len=in.read(buffer))!=-1) {
    os.write(buffer, 0, len);
}
in.close();
os.close(); 

2016.11.10

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,461评论 19 139
  • 本文包括:1、文件上传概述2、利用 Commons-fileupload 组件实现文件上传3、核心API——Dis...
    廖少少阅读 14,311评论 5 91
  • 小文件下载如果文件比较小,下载方式会比较多直接用NSData的+ (id)dataWithContentsOfUR...
    醉叶惜秋阅读 4,342评论 0 0
  • Servlet 实现文件下载 在生活或者工作中,总是避免不了下载文件,下载的东西有各种类型,譬如图片,视频,文本,...
    Lucky_Light阅读 11,254评论 1 10
  • 小文件下载如果文件比较小,下载方式会比较多直接用NSData的+ (id)dataWithContentsOfUR...
    JonesCxy阅读 3,971评论 0 1