完成文件的下载,我们首先需要有对应的资源,在我们的程序中,webapp下有一个文件夹images,这里面包含了几张图片,那我们就使用图片作为我们需要下载的资源来用。
中文名文件下下载乱码的处理:
文件在下载的过程中,如果文件名称中包含的有中文,就会出现中文乱码的情况。针对于下载文件名称中包含中文的处理是必须,因为中文在编码和解码的问题上总是不太那么的流畅。下面我们来对中文文件名进行一个处理。
(1)在pom.xml 文件中,引入codec 的 maven 坐标,在编解码的时候我们需要用到 Base64 这个工具类。
<l-- hcommons-codec, base64转码需要 --><dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId><version>1.10</version>
</dependency>
(2)在控制器中,新增加一个方法,专门为中文文件名来工作,在这个处理中文文件名的过程中,要把火狐浏览器单独区分开来,因为在这个浏览器中,对中文的编解码使用的就是 Base64,IE浏览器使用时 URLEncoder。
//针对中文名称,需要分浏览器来处理
pub1ic String getNewFileName(HttpServletRequest request,String filename){
try{
//获取请求头部信息的User-Agent对应的值
String request_str=request.getHeader("User-Agent");
if(request_str.toUpperCase().index0f("FIREFOX")>0){//火郭浏览器
filename:"=?UTF-8?B?"+(new
String(Base64.encodeBase64(filename.getBytes("utf-8"))))+"?=";
}e1se{//其他浏览器
filename = URLEncoder.encode(filename, "utf-8");
}catch(Exception e){
e.printstackTrace();}
return filename;}
(3)接下来,在我们设置响应头信息的时候,不能直接传入文件的名字,而是使用处理之后的文件名字。