可以直接给出文件路径,这样浏览器会自动解析且帮我们下载
使用servlet下载,在servlet中还可以做其他的逻辑操作
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String fileName = "乔布斯.txt";
String path = getServletContext().getRealPath("WEB-INF/files/"+fileName);
System.out.println(path);
/**
* 对中文的文件名加入URLEncoder加密
* 请求发送数据: request 带中文 -> 浏览器传输(URLEncoder) -> 服务器获取(URLDecoder)
响应发送数据: response 带中文(URLEncoder) -> 浏览器传输 - > 浏览器获取(URLDecoder)
*/
fileName = URLEncoder.encode(fileName, "utf-8");
/**
* 设置一个响应头: Content-Disposition 告诉浏览器以下载的方法打开该资源
*/
String content = "attachment;filename="+fileName;
response.setHeader("content-disposition", content);
//把文件内容发送给浏览器
OutputStream out = response.getOutputStream();
FileUtils.copyFile(new File(path), out);
}