Struts2通用文件下载示例

#Struts2通用文件下载示例

###Action类

public String download() {
    InputStream is = readDocsManager.getOneDoc(parent, name);
    HttpServletResponse response = HttpResponseHolder.getResponse();
    OutputStream out = null;
    try {
        //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型  
        response.setContentType("multipart/form-data");  
        //2.设置文件头:最后一个参数是设置下载文件名
        response.setHeader("Content-Disposition", "inline;fileName="+new String(name.getBytes(),"ISO8859-1"));
        out = response.getOutputStream();
        byte[] buf = new byte[1024];
        int size = -1;
        while ((size = is.read(buf)) != -1) {
            out.write(buf, 0, size);
        }
        response.flushBuffer();
    } catch (Exception e) {
        logger.error(e.getMessage(),e);
    }finally{
        IOUtils.closeQuietly(is);
        IOUtils.closeQuietly(out);

    }
    return "download";
}

代码readDocsManager.getOneDoc(parent,name)是根据路径和名称读取文件,并返回一个InputStream的对象。

###struts.xml中的配置

<action name="docAction" class="onlineDocsAction">
    <result name="download" type="httpheader">
    </result>
</action>

注意返回的类型是httpheader

###中文转码问题

文件上传下载的时候,请一定要注意中文的转码,否则后台会报FileNotFoundException的错误。