struts2的上传与下载

struts2文件的上传

1.struts文件上传
// 首先在struts.xml配置文件中修改上传文件的大小(52428800表示50M)并配置Action类
   <constant name="struts.multipart.maxSize" value="52428800"></constant>   
   <action name="UploadAction_*" class="com.lanou3g.UploadAction" method="{1}">
        <result name="success" type="redirect">/success.jsp</result>
    </action>
   创建Action类实现文件的上传
  public class UploadAction extends ActionSupport{
    // 声明一个file[] 属性(用来接收上传的文件)
    // 注意:命名规范 这个文件数组的名字 为提交的name属性
    private File[] file;
    // 声明一个String[] 数组 属性 用来接受上传文件的名字
    // 注意: 命名规范 name属性名 + FileName
    private String[] fileFileName;


    // 上传动作方法
    // 上传文件 到底这个文件放哪: 上传到你这个应用下的文件夹
    public String upload() {
        /*
         *  1.获取文件上传的路径(真实路径)
         *  2.拼接上传的文件夹路径
         *  3.在服务器上创建上传的文件夹
         *  4.把struts接收到的文件 保存到该路径下
         *  5.结束
         */
        // 获取ServletContext
        ServletContext application = ServletActionContext.getServletContext();
        // 获取真实路径(服务器的硬盘路径) 传入拼接的文件夹地址
        String realPath = application.getRealPath("/upload");
        // 根据路径创建文件夹(判断文件夹不存在 在创建)
        // 用这个路径创建一个file对象
        File f = new File(realPath);
        if (!f.exists()) {
            // 不存在就创建
            f.mkdir();
        }
        // 把struts接收过来的文件 放入该文件夹中
        // 遍历文件数组 取出每一个文件放入
        for (int i = 0; i < file.length; i++) {
            // 取出每一个文件放入
            File tempFile = file[i];
            // 取出每一个对应的文件名
            String tempFileName = fileFileName[i];
            // 直接将文件重新命名renameTo(把文件改个名 剪切过去)
            tempFile.renameTo(new File(realPath,tempFileName));
        }
        /*
         * 查看之前上传的文件的列表
         */
        return SUCCESS;
    }


    // 必须提供set/get方法
    public File[] getFile() {
        return file;
    }
    public void setFile(File[] file) {
        this.file = file;
    }
    public String[] getFileFileName() {
        return fileFileName;
    }
    public void setFileFileName(String[] fileFileName) {
        this.fileFileName = fileFileName;
    }
} 
2.struts2文件下载
 // 同样,也是首先在struts.xml配置文件中配置下载的Action类
 <action name="DownloadAction_*" class="com.lanou3g.DownloadAction" method="{1}">
        <!-- 告诉浏览器 相当于添加响应头 -->
        <!--stream类型 是专门用来下载的-->
        <result name="success" type="stream">
             <!--告诉浏览器 当前数据类型是下载-->
            <param name="contentType">application/octet-stream</param>
            <!--动态获取下载的文件名 ognl表达式 可以动态获取文件名 相当于获取该对象的值-->
            <param name="contentDisposition">attachment;filename=${fileName}</param>
                <!--告诉struts 我们下载的输入流 对象名-->
            <param name="inputName">fileInputStream</param>
        </result>
  </action>

// 创建Action类实现下载
  public class DownloadAction extends ActionSupport{
    // 获取表单传过来的问文件名
    // 这里会出现文件名的中文乱码问题
    // 需要修改fileName的编码格式
    private String fileName;
    // 声明一个读取文件的字节流属性(把流创建出来 其他交给struts)
    // 这个名字没有规范 但是你要告诉struts 你给它的是哪个流
    private InputStream fileInputStream;

    // 下载方法
    public String download() throws FileNotFoundException {
        /*
         * 1.获取用户要下载的文件的真实路径
         * 2.用这个路径初始化这个字节流
         */
        ServletContext application = ServletActionContext.getServletContext();
        String realPath = application.getRealPath("/upload/" + fileName);
        fileInputStream = new FileInputStream(realPath);
        return SUCCESS;
    }

    // 提供set/get方法
    public String getFileName() {
        // 修改编码格式 方法是给struts提供的
        // 当系统调用是修改 编码格式
        try {
            fileName = new String(fileName.getBytes(), "iso-8859-1");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return fileName;
    }
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
    public InputStream getFileInputStream() {
        return fileInputStream;
    }
    public void setFileInputStream(InputStream fileInputStream) {
        this.fileInputStream = fileInputStream;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值