天天看点

Servlet 下载文件

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

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

servlet类如下:

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"