项目中使用struts2 下载文件,使用手机浏览器有问题,老是报
java.lang.IllegalStateException: Cannot call sendError() after the response has been committed
没办法了,就使用servlet下载apk文件。
servlet类如下:
package com.shop.jn.web.servlet; import java.io.File; import java.io.IOException; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import com.common.util.SystemUtil; import com.io.hw.file.util.FileUtils; /** * download apk */ public class DownloadServlet extends HttpServlet { private static final long serialVersionUID = 1L; public DownloadServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { OutputStream out = response.getOutputStream(); // must be linux path(not \\) String filepath = request.getParameter("filepa"); if (StringUtils.isEmpty(filepath)) { filepath = "D:\\eclipse\\workspace\\apkmarket\\upload\\mpc.apk"; } File file = new File(filepath); response.addHeader("Content-Disposition", "attachment;filename=" + SystemUtil.getFileSimpleName(filepath)); response.setContentType("application/octet-stream"); byte[] bytes = FileUtils.readBytes4file(file); System.out.println("size:" + bytes.length); response.addHeader("Content-Length", "" + bytes.length); out.write(bytes); return; } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
使用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"
相关推荐
servlet下载文件
jsp+servlet实现文件下载(而不是在网页中显示出文件内容) 迅雷下载功能.zip
自己用servlet写的文件上传及下载功能带进度条 主要用到两个jar:commons-fileupload-1.2.2.jar和commons-io-2.0.1.jar 内容介绍: com.fm.FileManagerService:一个servlet用来实现主要的文件上传下载逻辑的 ...
java servlet实现文件点击下载。 将资源解压后配置在tomcat中,输入http://localhost:8080/DownLoadFileDemo/即可看到点击下载的链接
基于servlet的文件下载代码基于servlet的文件下载代码基于servlet的文件下载代码基于servlet的文件下载代码基于servlet的文件下载代码基于servlet的文件下载代码基于servlet的文件下载代码基于servlet的文件下载代码...
NULL 博文链接:https://liyaxi.iteye.com/blog/467618
Servlet实现文件上传与下载 Servlet 文件上传与下载
实现流程:获取项目文件夹所有文件,并以列表形式显示在页面上,可选择性下载
servlet下载文件简单代码
Servlet文件下载
java实现jsp+servlet文件下载及批量下载,mvc分层技术
java 写的文件上传下载的例子,可以做简单图片文件服务器
javaservlet帮助文档,javaservlet帮助文档,javaservlet帮助文档,javaservlet帮助文档,javaservlet帮助文档,javaservlet帮助文档,javaservlet帮助文档
Servlet中文件上传和下载,页面使用jsp里面实例化对象使用Javabean
包含翻译后的API文档:javax.servlet-api-4.0.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:javax.servlet:javax.servlet-api:4.0.0; 标签:javax、servlet、api、中文文档、jar包、java; 使用方法:解压翻译...
servlet api文档 servlet api说明文档servlet api说明文档
Servlet实现文件下载public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException{ String str = this.getServletContext().getRealPath("/download/隐形的翅膀 -...
这是一个使用servlet实现下载功能的小例子程序, 是一个完成的项目,使用netbeans开发的. 方便自己,方便别人
使用Servlet实现文件的上传与下载Demo
解压 【javax.servlet-api-***.jar中文文档.zip】,再解压其中的 【javax.servlet-api-***-javadoc-API文档-中文(简体)版.zip】,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档...