Servlet实现文件下载
把代码复制到servlet中处理方法中:
//1.接收用户文件名称
String filename = req.getParameter("filename");
//2.资源文件路径
String realPath = this.getServletContext().getRealPath("/download/" + filename);
//3.创建流对象
FileInputStream read = new FileInputStream(realPath);
ServletOutputStream out = resp.getOutputStream();
//4.设置响应头下载类型
String mimeType = this.getServletContext().getMimeType(filename);
resp.setHeader("Content-Type",mimeType);
//中文字符处理
filename = DownLoadUtils.getFileName(req, filename);
resp.setHeader("Content-Disposition","attachment; filename="+filename);
//5.写入(响应)文件,
byte[] bs = new byte[1024];
int len = 0;
while ((len=read.read(bs)) != -1){
out.write(bs,0,len);
}
out.close();
read.close();
DownLoadUtils类如下:
import javax.servlet.http.HttpServletRequest;
import java.util.Base64;
import java.util.Base64.Encoder;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
public class DownLoadUtils {
public static String getFileName(HttpServletRequest request, String filename) throws UnsupportedEncodingException {
String agent = request.getHeader("User-agent");
if (agent.contains("MSIE")) {
// IE浏览器
filename = URLEncoder.encode(filename, "utf-8");
filename = filename.replace("+", " ");
} else if (agent.contains("Firefox")) {
// 火狐浏览器
Encoder encoder = Base64.getEncoder();
filename = "=?utf-8?B?" + encoder.encode(filename.getBytes("utf-8")) + "?=";
} else {
// 其它浏览器
filename = URLEncoder.encode(filename, "utf-8");
}
return filename;
}
}