- _nosay
Servlet文件下载
2017-11-20 15:25:56
前文学了response有两个输出的方式,分别是
response.getWriter();//输出字节码文件的
response.getOutputStream();//输出二进制文件的
而读取文件,我们需要new一个FileInputStream
首先建立一个DownServlet文件,相关代码如下:
package com.nosay.servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
@WebServlet(name = "DownloadlServlet",urlPatterns = "/download")
public class DownloadlServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String filename = request.getParameter("filename");
String realPath = this.getServletContext().getRealPath("download/" + filename);
InputStream in = new FileInputStream(realPath);
ServletOutputStream outputStream = response.getOutputStream();
//文件拷贝
int len = 0;
byte[] buffer = new byte[1024];
while ((len=in.read(buffer)) > 0)
{
outputStream.write(buffer,0,len);
}
in.close();
}
}此时我们在根目录建立一个download文件夹,在里面建立aa.txt文本文件,内容为hello
然后访问一下http://localhost:8080/download?filename=aa.txt
此链接
成功得到了aa.txt中的内容,hello
如何不在浏览器中查看,而是直接下载此txt文件呢?
此时我们需要一个响应头来通知浏览器直接下载
1.通过文件输入输出流将文件返回给客户端浏览器.
2.通过对应的http响应头通知浏览器下载该文件.
告知浏览器文件的类型:response.setContentType(文件的MIME)类型
告知浏览器文件的打开方式是下载
response.setHeader("Content-Disposition","attachment;filename=文件名称")
相关代码
package com.nosay.servlet;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
@WebServlet(name = "DownloadlServlet",urlPatterns = "/download")
public class DownloadlServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String filename = request.getParameter("filename");
String mimeType = this.getServletContext().getMimeType(filename);
response.setContentType(mimeType);
response.setHeader("Content-Disposition","attachment;filename="+filename);
String realPath = this.getServletContext().getRealPath("download/" + filename);
InputStream in = new FileInputStream(realPath);
ServletOutputStream outputStream = response.getOutputStream();
//文件拷贝
int len = 0;
byte[] buffer = new byte[1024];
while ((len=in.read(buffer)) > 0)
{
outputStream.write(buffer,0,len);
}
in.close();
}
}