文件下载
Posted laodang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件下载相关的知识,希望对你有一定的参考价值。
//接收参数并解决乱码 String filename = new String(request.getParameter("filename").getBytes("iso-8859-1"),"utf-8"); //根据文件名称得到mime类型 String mimeType = this.getServletContext().getMimeType(filename); response.setHeader("Content-Type", mimeType); //获取浏览器相关信息 String agent = request.getHeader("User-Agent"); //判断是什么浏览器,根据不同浏览器解码 /* * 不同浏览器下载中文文件时解析文件编码不同,Firefox浏览器下载中文文件名的时候采用的是Base64的字符编码解码文件名. * 文件名是通过Content-Disposition消息带过去的,所以需要提前转换成URL或者Base64的编码后字符。过去才可以正常解码; */ if(agent.contains("Firefox")){ filename = base64EncodeFileName(filename); }else{ filename = URLEncoder.encode(filename,"UTF-8"); } //Content-Disposition该响应头告诉浏览器以什么方式处理,attachment值告诉以附件形式下载,filename值为附件显示名称。 response.setHeader("Content-Disposition", "attachment;filename="+filename); InputStream is = this.getServletContext().getResourceAsStream("/download/中文文件.rmvb"); ServletOutputStream os = response.getOutputStream(); int len = 0; byte[] a = new byte[1024]; while ((len=is.read(a)) != -1) { os.write(a,0,len); } is.close(); os.close();
public static String base64EncodeFileName(String fileName) { BASE64Encoder base64Encoder = new BASE64Encoder(); try { return "=?UTF-8?B?" + new String(base64Encoder.encode(fileName .getBytes("UTF-8"))) + "?="; } catch (UnsupportedEncodingException e) { e.printStackTrace(); throw new RuntimeException(e); } }
以上是关于文件下载的主要内容,如果未能解决你的问题,请参考以下文章
在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途