首页 > 代码库 > Struts2 实现文件上传和下载

Struts2 实现文件上传和下载

实现上传功能

1.首先你应该有一个上传页面

<!-- file的name属性与action中的File类型属性保持一致,用于封装File控件对应的文件内容 -->        <s:file name="upload" label="选择文件"></s:file>

2.然后创建一个文件上传的XXXaction

public class UploadAction extends ActionSupport implements ModelDriven<File> {    // 封装上传文件属性    private File upload;    // 封装上传文件的类型    private String uploadContentType;    // 封装生成文件名称    private String uploadFileName;    // 获取文件上传的路径    private String savePath;    @Override    public String execute() throws Exception {        // 准备一个byte数组        byte[] buffer = new byte[1024];        // 读取文件        FileInputStream fis = new FileInputStream(getUpload());        // 保存文件,并设置保存目录路径        FileOutputStream fos = new FileOutputStream(getSavePath() + "\\"                + this.getUploadFileName());        int length = fis.read(buffer);        // 循环写入        while (length > 0) {            // 每次写入length长度的内容            fos.write(buffer, 0, length);            length = fis.read(buffer);        }        fis.close();        fos.flush();        fos.close();        return SUCCESS;    }   public void setUploadContentType(String uploadContentType) {        this.uploadContentType = uploadContentType;    }  public void setUploadFileName(String uploadFileName) {        this.uploadFileName = uploadFileName;    }    // 获取上传文件的保存路径    // 通过读取存放目录货的保存路径    public String getSavePath() {        return ServletActionContext.getServletContext().getRealPath(savePath);    }
}

 

3.然后配置Struts.xml

添加上传的action元素

<!-- 上传文件的action -->        <action name="uploadAction" class="cn.cnsdhzzl.action.UploadAction">            <!-- 通过param参数设置保存目录的路径 -->            <param name="savePath">/upload</param>            <result name="success">uploadSuccess.jsp</result>        </action>

 

实现下载功能

1.首先你需要有一个下载链接

<-- 指向下载的action逻辑视图名 --><a href="downloadAction?fileName=123.jpg">点击下载</a>

2.创建一个下载XXXaction

public class DownloadAction extends ActionSupport {    // 读取下载文件的目录    private String inputPath;    // 下载文件的文件名    private String fileName;    // 下载文件的输入流    private InputStream inputStream;    // 下载文件的类型    private String conetntType;    @Override    public String execute() throws Exception {        return SUCCESS;    }public InputStream getInputStream() throws FileNotFoundException {        String path = ServletActionContext.getServletContext().getRealPath(                inputPath);        return new BufferedInputStream(new FileInputStream(path + "\\"                + fileName));    }//省略部分getset}

3.然后配置Struts.xml

添加下载的action元素

<!-- 下载文件的action -->        <action name="downloadAction" class="cn.cnsdhzzl.action.DownloadAction">            <param name="inputPath">/upload</param>            <result name="success" type="stream">                <!-- 设置文件类型 -->                <param name="contentType">application/image/jpeg</param>                <param name="inputName">inputStream</param>                <!-- 分为两部分,即设置下载处理方式和设置下载文件显示的文件名 -->                <param name="contentDisposition">attachment;filename="${fileName}"</param>                <param name="bufferSize">4096</param>            </result>            <result name="error">error.jsp</result>        </action>

 

Struts2 实现文件上传和下载