实现文件下载有个中文乱码问题,所以先来个工具类
package cn.itcast.utils; import sun.misc.base64encoder; import java.io.unsupportedencodingexception; import java.net.urlencoder; public class downloadutils { public static string getfilename(string agent, string filename) throws unsupportedencodingexception { if (agent.contains("msie")) { // ie浏览器 filename = urlencoder.encode(filename, "utf-8"); filename = filename.replace("+", " "); } else if (agent.contains("firefox")) { // 火狐浏览器 base64encoder base64encoder = new base64encoder(); filename = "=?utf-8?b?" + base64encoder.encode(filename.getbytes("utf-8")) + "?="; } else { // 其它浏览器 filename = urlencoder.encode(filename, "utf-8"); } return filename; } }
接下来就是servlet类的实现:
@webservlet(name = "downloadservlet",urlpatterns = "/download3") public class downloadservlet extends httpservlet { @override protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { doget(request,response); } @override protected void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { // 1.获取文件名 string filename = request.getparameter("filename"); // 2.获取真实路径 // 2.1 获取servletcontext servletcontext servletcontext = this.getservletcontext(); // 2.2 根据文件存储的位置,选择路径,本人的路径是web下的upload下的文件 string realpath = servletcontext.getrealpath("/upload/" + filename); // 3.设置响应头 // 3.1 设置content-type response.setheader("content-type",servletcontext.getmimetype(filename)); // 3.2 解决中文乱码 string agent = request.getheader("user-agent"); filename = downloadutils.getfilename(agent,filename); // 3.3 设置content-disposition response.setheader("content-disposition","attachment;filename=" + filename); // 4.标准的io流 fileinputstream fis = new fileinputstream(realpath); servletoutputstream sos = response.getoutputstream(); byte[] b = new byte[1024 * 8]; int len = 0; while((len = fis.read(b)) != -1){ sos.write(b,0,len); } fis.close(); sos.close(); } }
如对本文有疑问, 点击进行留言回复!!
android sdk源码 andoid-21 下的TextUtils.java文本工具类 源码赏析
地理坐标(WGS84),投影坐标下(Mercator)切片系统的计算Java类
荐 JavaWeb~简单认识以太网、MAC地址、MTU机制、ARP协议、DNS协议
HUAWEI MH5000-31 LGA Module Hardware Guide draft
网友评论