struts2文件上传和下载

三、 文件上传和下载
 文件上传的步骤(利用fileUpload的拦截器完成的)
1.1.1 编写上传页面

<body>
    <form action="" method="post" enctype="multipart/form-data">
        文件:<input type="file" name="myfile"/><br>
        <input type="submit" value="上传">
    </form>
  </body>

1.1.2 编写处理上传的业务逻辑action
如果要获取上传文件的名称: 上传文件的属性名+FileName
如果要获取上传文件的文件类型: 上传文件的属性名+ContentType

package cn.zzsxt.action;
import java.io.File;
import org.apache.commons.io.FileUtils;
import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {
    private File myfile;//接受上传的文件
    private String myfileFileName;//上传文件的属性+FileName获取上传文件的名称,并绑定到该属性上
    private String myfileContentType;//上传文件的属性+ContentType获取上传文件的类型,并绑定到该属性上
    public File getMyfile() {
        return myfile;
    }
    public void setMyfile(File myfile) {
        this.myfile = myfile;
    }
    public String getMyfileFileName() {
        return myfileFileName;
    }
    public void setMyfileFileName(String myfileFileName) {
        this.myfileFileName = myfileFileName;
    }
    public String getMyfileContentType() {
        return myfileContentType;
    }

    public void setMyfileContentType(String myfileContentType) {
        this.myfileContentType = myfileContentType;
    }


    @Override
    public String execute() throws Exception {
        System.out.println(myfileFileName+"---"+myfileContentType);
        File uploadDir = new File("D:/upload");
        //如果上传文件的保存目录不存在,则创建该目录
        if(!uploadDir.exists())
            uploadDir.mkdirs();//创建目录
        //上传
        FileUtils.copyFile(myfile, new File(uploadDir,myfileFileName));

        return this.SUCCESS;
    }
}

1.1.3 配置struts.xml

<struts>
    <!--struts.multipart.maxSize定义允许上传的最大字节数,默认为2M  -->
    <constant name="struts.multipart.maxSize" value="209715200"></constant>
    <package name="upload" extends="struts-default">
        <action name="upload" class="cn.zzsxt.action.UploadAction">
            <!-- 如果result的name属性缺省,则默认值为success -->
            <result>/success.jsp</result>
        </action>
    </package>
</struts>   

2.1 文件下载:利用stream结果视图完成文件的下载
实现步骤
 编写下载页面

<body>
    <a href="download.action?fileName=myblog.sql">下载--->myblog.sql</a>      
    <a href="download.action?fileName=aopalliance.jar">下载--->aopalliance.jar</a>    
  </body>

 编写处理下载的业务逻辑Action

package cn.zzsxt.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

import com.opensymphony.xwork2.ActionSupport;
/**
 * 利用stream结果视图完成下载
 * @author Think
 *
 */
public class DownloadAction extends ActionSupport {
    private String fileName;//获取要下载的文件名称
    private InputStream inputStream;//输入流(将要下载的问题转换为输入流,结合stream结果视图完成下载操作)
    public String getFileName() {
        return fileName;
    }
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }


    public InputStream getInputStream() {
        return inputStream;
    }
    public void setInputStream(InputStream inputStream) {
        this.inputStream = inputStream;
    }
    @Override
    public String execute() throws Exception {
        File file = new File("D:/upload",fileName);//将要下载的文件转为File对象
        inputStream = new FileInputStream(file);//转换为输入流
        return this.SUCCESS;
    }
}

 配置struts.xml

<action name="download" class="cn.zzsxt.action.DownloadAction">
            <result name="success" type="stream">
                <!--回调action中getInputStream()方法获取文件流的数据,命名应该为流的属性名称 -->
                <param name="inputName">inputStream</param>
                <!-- 设置文件下载的类型 application/octet-stream对下载类型不做限制 -->
                <param name="contentType">application/octet-stream</param>
                <!-- attachment;以附件的方式保存,  filename="下载文件保存的名称" ${属性名}可以获取action中属性的值 -->
                <param name="contentDisposition">attachment;filename=${fileName}</param>
            </result>
        </action>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值