当前位置:网站首页>Browser downloads files as attachments
Browser downloads files as attachments
2022-06-30 06:51:00 【Sunny husband】
@WebServlet("/downloadServlet")
public class DownloadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. Get request parameters , File name
String filename = request.getParameter("filename");
//2. Use byte input stream to load file into memory
//2.1 Find the file server path
ServletContext servletContext = this.getServletContext();
String realPath = servletContext.getRealPath("/img/" + filename);
//2.2 Associate with a byte stream
FileInputStream fis = new FileInputStream(realPath);
//3. Set up response Response header for
//3.1 Set response header type :content-type
String mimeType = servletContext.getMimeType(filename);// retrievable mime type
response.setHeader("content-type",mimeType);
//3.2 Set the opening mode of response header :content-disposition
// Solve the problem of Chinese file name
//1. obtain user-agent Request header 、
String agent = request.getHeader("user-agent");
//2. Use the tool class method to encode the file name
filename = getFileName(agent, filename);
response.setHeader("content-disposition","attachment;filename="+filename);
//4. Write the data from the input stream into the output stream
ServletOutputStream sos = response.getOutputStream();
byte[] bytes= new byte[1024 * 8];
int len = 0;
while((len = fis.read(bytes)) != -1){
sos.write(bytes,0,len);
}
fis.close();
}
// Get the Chinese file name of different browser attachments
public String getFileName(String agent, String filename) throws UnsupportedEncodingException {
if (agent.contains("MSIE")) {
// IE browser
filename = URLEncoder.encode(filename, "utf-8");
filename = filename.replace("+", " ");
} else if (agent.contains("Firefox")) {
// Firefox
BASE64Encoder base64Encoder = new BASE64Encoder();
filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
} else {
// Other browsers
filename = URLEncoder.encode(filename, "utf-8");
}
return filename;
}
边栏推荐
猜你喜欢
随机推荐
0 basic job transfer software test, how to achieve a monthly salary of 9.5k+
【模糊神经网络】基于模糊神经网络的移动机器人路径规划
关注这场直播,了解能源行业双碳目标实现路径
神经网络入门
leetcode:98. 验证二叉搜索树
成品升级程序
RT thread application
GO安装以及配置(1)
与MQTT的初定情缘
Rising posture series: fancy debugging information
Four ways to create multithreads
SOC_ SD_ CLK
1.5 - logical operation
MySQL优化:从十几秒优化到三百毫秒
SOC project AHB_ SD_ Host controller design
随机网络,无标度网络,小世界网络以及NS小世界的性能对比matlab仿真
File Transfer Protocol,FTP文件共享服务器
【json-tutorial】第一章学习笔记
Ls1028 manual
【我的创作纪念日】一周年随笔









![[JSON tutorial] Chapter 1 learning notes](/img/ce/cf74b396a8bd4c4c7028663b8cb665.png)