Servlet 下载文件

项目中使用struts2 下载文件,使用手机浏览器有问题,老是报

Java.lang.IllegalStateException: Cannot call sendError() after the response has been committed

没办法了,就使用servlet下载apk文件。

servlet类如下:

Java代码  

  1. package com.shop.jn.web.servlet;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5. import java.io.OutputStream;  
  6.   
  7. import javax.servlet.ServletException;  
  8. import javax.servlet.http.HttpServlet;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11.   
  12. import org.apache.commons.lang.StringUtils;  
  13.   
  14. import com.common.util.SystemUtil;  
  15. import com.io.hw.file.util.FileUtils;  
  16.   
  17. /** 
  18.  *  download apk 
  19.  */  
  20. public class DownloadServlet extends HttpServlet {  
  21.     private static final long serialVersionUID = 1L;  
  22.   
  23.     public DownloadServlet() {  
  24.         super();  
  25.     }  
  26.   
  27.     protected void doGet(HttpServletRequest request,  
  28.             HttpServletResponse response) throws ServletException, IOException {  
  29.         OutputStream out = response.getOutputStream();  
  30.         // must be linux path(not \\)  
  31.         String filepath = request.getParameter("filepa");  
  32.         if (StringUtils.isEmpty(filepath)) {  
  33.             filepath = "D:\\eclipse\\workspace\\apkmarket\\upload\\mpc.apk";  
  34.         }  
  35.         File file = new File(filepath);  
  36.         response.addHeader("Content-Disposition", "attachment;filename="  
  37.                 + SystemUtil.getFileSimpleName(filepath));  
  38.         response.setContentType("application/octet-stream");  
  39.         byte[] bytes = FileUtils.readBytes4file(file);  
  40.         System.out.println("size:" + bytes.length);  
  41.         response.addHeader("Content-Length", "" + bytes.length);  
  42.         out.write(bytes);  
  43.         return;  
  44.     }  
  45.   
  46.     protected void doPost(HttpServletRequest request,  
  47.             HttpServletResponse response) throws ServletException, IOException {  
  48.         doGet(request, response);  
  49.     }  
  50.   
  51. }  

 使用servlet之后,手机浏览器仍然有问题,后来发现是因为路径分隔符的问题。

上述servlet需要一个请求要素,就是文件路径。

手机浏览器中,点击一个超链接就开始下载,超链接形如download.do?filepath=D:\eclipse\workspace\apkmarket\upload\mpc.apk

这时,就会下载失败,经过反复测试、尝试,发现路径分隔符有问题,改为:download.do?filepath=D:/eclipse/workspace/apkmarket/upload/mpc.apk 就好了。

说明:手机是安卓系统。

 

注意:

(1)安卓手机浏览器下载文件时,下载的超链接中文件路径应该使用linux的格式(xxx/xxx/xxx/);

(2)下载servlet中要指定ContentType 为"application/octet-stream"

时间: 2024-08-31 07:26:55

Servlet 下载文件的相关文章

Servlet下载文件文件名问题

问题描述 Servlet下载文件文件名问题 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { FileDBO fileDBO = new FileDBO(); String fileID = request.getParameter("fileId"); FileInfor file = fileDBO

Servlet中的上传下载文件

一.文件上传 文件的上传也是基于表单来完成的,表单中的file元素可以自动生成一个文本框和一个按钮,文本框可以输入本地文件名或路径,点击按钮则可以打开一个文件选择框让用户选中本地文件.需要注意的是在文件上传时还必须设置表单的enctype属性,并将它的值设置为multipart/form-data. upload.jsp   <FORM METHOD="POST" ENCTYPE="multipart/form-data"    ACTION="Sm

使用Servlet实现下载文件的功能

使用Servlet实现下载文件的功能 在前台有一个下载链接,比如   <a href="DownLoadServlet">下载</a> <br/>   使用Servlet实现下载:     import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.URLEncoder; import javax.servlet.Se

jsp+servlet实现文件的上传和下载

实现文件的上传和下载首先需要理解几个知识,这样才可以很好的完成文件的上传和下载: (1):上传文件是上传到服务器上,而保存到数据库是文件名 (2):上传文件是以文件转换为二进制流的形式上传的 (3): enctype="multipart/form-data"需要设置在form里面,否则无法提交文件 (4):必须在servlet3.0里面加上这句话,@MultipartConfig  1:首先创建一个前台页面upload.jsp,源码如下所示: 1 <%@ page langua

下载文件的servlet(很简单的)

servlet|下载 import java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*; public class  Download extends HttpServlet{    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletE

使用JSP/Servlet上载文件

js|servlet 使用 JSP/ Servlet上载文件正成为一项常用的任务.以下是一个简单的例程,使用了jspsmart的一个免费的组件.你可以在JSPSMART站点进行下载. 1. Html File <html> <body> <script LANGUAGE="javascript" SRC="JSFunction.js"> </script> <script language="JavaS

文件下载-手机浏览器从web端下载文件失败,但是在pc浏览器上正常,该如何解决?

问题描述 手机浏览器从web端下载文件失败,但是在pc浏览器上正常,该如何解决? 这个是抛出的异常 org.apache.catalina.connector.ClientAbortException: java.io.IOException: Broken pipe at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:393) at org.apache.tomcat.util.buf.B

请问如何利用Java实现自动下载文件:此文件需要输入用户名及密码登录后才能下载。

问题描述 如题,谢谢! 解决方案 解决方案二:不明白什么是自动下载.解决方案三:在你点击的同时判断范围内是否存在登陆用户的信息..有则下没有则提示解决方案四:做一个文件下载的servletservlet中设置response的类型例如:res.setContentType("application/octet-stream;charset=UTF-8");res.setHeader("Content-Disposition","attachment;fil

Java Spring MVC 上传下载文件配置及controller方法详解_java

下载: 1.在spring-mvc中配置(用于100M以下的文件下载) <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <!--配置下载返回类型--> <bean class="or