Struts2 实现文件上传和下载

实现上传功能

Struts2实际上是使用的commons fileupload 组件,所以记得导包哦。

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>
原文地址:https://www.cnblogs.com/cnsdhzzl/p/5841805.html