项目中使用struts2 下载文件,使用手机浏览器有问题,老是报
没办法了,就使用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,
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"