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

你可能感兴趣的:(java web 文件下载)