任务:实现图片下载和压缩文件下载,解决中文乱码问题
一、解决中文乱码(详细看代码)
问题(中文名会出现乱码,英文不会):
resp.setHeader( "content-disposition", "attachment;filename-"+filename)
解决(中文名恢复正常):
resp.setHeader("content-disposition","attachment;filename="+ URLEncoder.encode(filename,"utf-8"));
二、资源下载
准备照片或压缩包
压缩包Library.zip , 压缩包照片library.jpg , 英文照片gongzi.jpg , 中文照片:杰.jpeg
download.jsp前端代码:
<img src="img/gongzi.jpg" width="350px" height="450px"><br>
<a href="DownControllor?resourcename=img/gongzi.jpg">下载</a></br>
<img src="img/杰.jpeg" width="400px" height="250px"><br>
<a href="DownControllor?resourcename=img/杰.jpeg">下载</a></br>
<img src="img/Library.jpg" width="65px" height="63px"></br>
<a href="img/Library.zip">下载</a>
DownControllor后端代码:
@WebServlet("/DownControllor")
public class DownControllor extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取资源名字
String resourcename = req.getParameter("resourcename");
//获取资源路径
String realPath = this.getServletContext().getRealPath(resourcename);
//截取文件名
int i = realPath.lastIndexOf(File.separator);
String filename = realPath.substring(i + 1);
//解决中文乱码问题
/*resp.setHeader( s:"content-disposition", s1:"attachment;filename-"+filename);*/
resp.setHeader("content-disposition","attachment;filename="+ URLEncoder.encode(filename,"utf-8"));
FileInputStream inputStream = new FileInputStream(realPath);
ServletOutputStream out = resp.getOutputStream();
byte[] b =new byte[1024];
int res = 0;
while((res = inputStream.read(b))!=-1){
out.write(b,0,res);
}
out.close();
inputStream.close();
}
}
运行结果:
点击下载: