文件下载
浏览器默认下载文件的方式为inline即能打开就打开,不能打开就下载。
通过给a标签href中的属性值赋值,可以完成对一些浏览器无法解析打开的文件进行下载。但是当要下载的文件浏览器能解析打开,要如何告诉浏览器进行下载此文件呢?

通知客户端浏览器: 这是一个需要下载的文件, 不能再按普通的 html 的方式打开.
1 2
| response.setContentType("application/x-msdownload");
|
通知客户端浏览器: 不再有浏览器来处理该文件, 而是交由用户自行处理
设置响应流中文件进行下载,attachment以附件形式下载,filename= 表示下载显示的下载文件名。
1 2
| response.setHeader("Content-Disposition", "attachment;filename=abc.txt");
|


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| package com.kylin.servlet;
import org.apache.commons.io.FileUtils;
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.net.URLEncoder;
@WebServlet("/downloadServlet") public class DownloadServlet extends HttpServlet {
@Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("application/x-msdownload");
String fileName = "文件下载.txt";
resp.setHeader("Content-Disposition","attachment;filename="+ URLEncoder.encode(fileName,"utf-8")); OutputStream out = resp.getOutputStream(); File txtFileName = new File("C:\\Data\\IDM\\Java学习\\尚硅谷Java\\3.JavaWeb阶段\\尚硅谷JavaWEB视频教程\\22. 尚硅谷_佟刚_JavaWEB_源代码\\fileUpload\\note.txt");
byte[] bytes = FileUtils.readFileToByteArray(txtFileName); out.write(bytes); out.flush(); out.close(); } }
|