1.下载也就是向客户端响应字节数据。要把一个文件变成字节数组,可以通过Response.getOutputStream()给浏览器。
2.下载要点:两个头,一个流!
>contentType:定义传递给客户端的是什么MIME类型。例如:image/jpeg、text/html 等等
>>contentType获取方式:通过ServletContext类中的getMimeType(String filename)得到contentType类型。
>Content-Disposition:它的默认值是inline。表示直接在浏览器中打开!若定义为:attachment;filename=xxx。则表示以附件的形式下载,filename后面跟下载时显示的文件名。
>流:要下载的文件数据。
3.下载框中出现中文乱码问题
>FireFox浏览器:采用的是Base64编码方式。
>其它大部分浏览器:采用的是URL编码方式。
>两种处理方案:
>>最直接、通用的方法:对下载框中出现的文件名先进行如下处理 filename = new String(filename.getBytes("UTF-8"),"ISO8859-1");
>>一劳永逸方案:
private String filenameEncoding(String filename, HttpServletRequest request) throws UnsupportedEncodingException {
String agent = request.getHeader("User-Agent");//获取浏览器信息
if(agent.contains("FireFox")) {//火狐浏览器
BASE64Encoder base64Encoder = new BASE64Encoder();
filename = "=?utf-8?B?"
+base64Encoder.encode(filename.getBytes("utf-8"))
+"?=";
} else if(agent.contains("MSIE")) {//IE浏览器
filename = URLEncoder.encode(filename,"utf-8");
} else {
filename = URLEncoder.encode(filename, "utf-8");
}
return filename;
}