response的响应头,下载文件
前端代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>下载页面</title>
</head>
<body>
<a href="downloadFileServlet?filename=1.jpg">图片1</a>
<a href="downloadFileServlet?filename=2.jpg">图片2</a>
<a href="downloadFileServlet?filename=三国.mp4">三国视频1</a>
</body>
</html>
后端代码
@WebServlet("/downloadFileServlet")
public class DownloadFileServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求和响应编码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取请求参数
String filename = request.getParameter("filename");
ServletContext context = this.getServletContext();
String realPath = context.getRealPath("/img/" + filename);
//加载进内存
FileInputStream fis = new FileInputStream(realPath);
//设置response的响应头
String mimeType = context.getMimeType(filename);
response.setHeader("content-type", mimeType);//获取文件的MIME类型
//设置响应头的打开方式:content-disposition
//解决中文文件名问题
//1.获取user-agent请求头
String agent = request.getHeader("user-agent");
//2.使用工具类方法编码文件名即可
filename = DownLoadUtils.FileName(agent, filename);
response.setHeader("content-disposition", "attachment;filename=" + filename);
//将输入流的数据写出到输出流中
ServletOutputStream os = response.getOutputStream();
byte[] bys = new byte[1024 * 8];
int len;
while ((len = fis.read()) != -1) {
os.write(bys, 0, len);
}
fis.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}