JavaWeb文件下载
文件下载
浏览器默认下载文件的方式为inline即能打开就打开,不能打开就下载。 通过给a标签href中的属性值赋值,可以完成对一些浏览器无法解析打开的文件进行下载。但是当要下载的文件浏览器能解析打开,要如何告诉浏览器进行下载此文件呢?
通知客户端浏览器: 这是一个需要下载的文件, 不能再按普通的 html 的方式打开.
//即设置一个响应的类型: application/x-msdownload
response.setContentType("application/x-msdownload");
通知客户端浏览器: 不再有浏览器来处理该文件, 而是交由用户自行处理 设置响应流中文件进行下载,attachment以附件形式下载,filename= 表示下载显示的下载文件名。
//设置用户处理的方式: 响应头: Content-Disposition
response.setHeader("Content-Disposition", "attachment;filename=abc.txt");
package com.kylin.servlet;
@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");
/* InputStream in = new FileInputStream(txtFileName);
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer))!=-1){
out.write(buffer,0,len);
}
in.close();*/
byte[] bytes = FileUtils.readFileToByteArray(txtFileName);//读取文件成一个二进制数组
out.write(bytes);
out.flush();
out.close();
}
}
转载自:https://juejin.cn/post/7248137735311360061