Servlet提供文件下载功能
说明:
servlet直接向前台传送文件
代码例子:
package service; import java.io.*; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import model.Book; public class GetBookZipFile extends HttpServlet { @Override public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("application/octet-stream"); request.setCharacterEncoding("utf-8"); Book tempBook = new Book("480"); //输出文件流 response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename=\"480.zip\""); response.setContentLength((int) new File(tempBook.GetBookZipFilePath()).length()); BufferedInputStream bis = new BufferedInputStream(new FileInputStream(tempBook.GetBookZipFilePath())); BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream()); byte[] buffer = new byte[1024]; int length = 0; while((length = bis.read(buffer)) != -1){ bos.write(buffer, 0, length); } if (bis != null) bis.close(); if (bos != null) bos.close(); } }
注意:
1.response.setContentLength参数为int型,支持的文件大小大概只有2g多,没有经过测试,但是出问题可以这个方面找。
2.response.setContentLength((int) new File(tempBook.GetBookZipFilePath()).length());这一句告诉浏览器文件的大小,但是仍然没有进度与网速的显示。
3.不支持断点续传