Servlet实现文件下载

来源:互联网 发布:淘宝足球竞猜 编辑:程序博客网 时间:2024/05/20 21:18
import java.io.FileInputStream;import java.io.IOException;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.InputStream;import java.io.OutputStream;import java.net.URLEncoder;public class DownloadServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// String path = "D:/WebTest/download/file.txt";// 应使用下面这种方式获取路径String path = getServletContext().getRealPath("/download/file.txt");response.setHeader("content-disposition", "attachment;filename=file.txt");InputStream in = null;OutputStream out = null;try {in = new FileInputStream(path);out = response.getOutputStream();byte[] buffer = new byte[1024];for (int len = 0; (len = in.read(buffer)) > 0;) {out.write(buffer, 0, len);}} catch (IOException e) {e.printStackTrace();} finally {if (in != null) {try {in.close();} catch (Exception e) {e.printStackTrace();}}}}}

用户发出请求后会出现下载框:


如果下载文件是中文文件,则文件名需要经过url编码


response.setHeader("content-disposition", "attachment;filename=file.txt");应修改为

response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode("文件.txt", "UTF-8"));

// String path = "D:/WebTest/download/file.txt";// 应使用下面这种方式获取路径String path = getServletContext().getRealPath("/download/file.txt");//response.setHeader("content-disposition", "attachment;filename=file.txt");response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode("文件.txt", "UTF-8"));InputStream in = null;OutputStream out = null;try {in = new FileInputStream(path);out = response.getOutputStream();byte[] buffer = new byte[1024];for (int len = 0; (len = in.read(buffer)) > 0;) {out.write(buffer, 0, len);}} catch (IOException e) {e.printStackTrace();} finally {if (in != null) {try {in.close();} catch (Exception e) {e.printStackTrace();}}}