JavaWeb-使用ServletContext下载文件
代码如下:
public class DownloadServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 获取文件存放路径 String filePath = this.getServletContext().getRealPath("/WEB-INF/classes/测试.txt"); // 获取文件名称 String fileName = filePath.substring(filePath.lastIndexOf("/") + 1); // 创建文件对象 File file = new File(filePath); // 创建文件输入流 FileInputStream in = new FileInputStream(file); // 设置响应头部信息,使浏览器能识别并弹出下载框 resp.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName,"utf-8")); // 创建文件输出流 ServletOutputStream out = resp.getOutputStream(); // 将文件读进缓冲区,并从流中输出 int len = 0; byte[] buffer = new byte[1024]; while ((len = in.read(buffer))>0) { out.write(buffer,0,len); } // 关闭输入输出流 in.close(); out.close(); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
web.xml 配置:
<servlet> <servlet-name>download</servlet-name> <servlet-class>com.study.servletcontext.DownloadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>download</servlet-name> <url-pattern>/download</url-pattern> </servlet-mapping>
问题记录:
代码写完后测试的时候发现下载的文件为空,改为图片测试后现实图片格式已损坏,开始以为是maven在构建的时候损坏了文件,但是查看了构建完成后target目录下的文件可以正常打开,尝试在pom.xml中配置之后依然没有解决。pom.xml修改的配置记录如下:在build标签下添加如下内容:
<resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <excludes> <exclude>*.txt</exclude> <exclude>*.png</exclude> </excludes> </resource> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <includes> <include>*.txt</include> <include>*.png</include> </includes> </resource> </resources>
但是 并没有解决。仔细检查了自己的代码后发现,在输入输入流read的时候,没有把read的内容添加到缓存区,即刚开始的代码如下:
int len = 0; byte[] buffer = new byte[1024]; while ((len = in.read())>0) { out.write(buffer,0,len); }
read方法中没有添加buffer参数!!!