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;
}
}



 
原文地址:https://www.cnblogs.com/M87-A/p/12584445.html