• Struts2文件上传与下载


    一、文件上传, Struts2文件上传基于拦截器,底层使用commons-fileupload

      文件上传对表单的要求,method=“post” , enctype="multipart/form-data",  表单中要有 file 类型的文本域

      1、创建上传文件的表单

      2、创建上传的Action类:接收的文件属性名要与表单中的一致     文件名称为  表单中的名字+fileName    、 文件类型为  表单中的名字+contentType  ,提供set  get方法

      

     1 public String upload() {
     2         ServletContext servletContext = ServletActionContext.getServletContext();
     3         String realPath = servletContext.getRealPath("/");
     4         String path = realPath + "/upload" + "/" + fileFileName;
     5         try {
     6             FileUtils.copyFile(file, new File(path));
     7         } catch (IOException e) {
     8             e.printStackTrace();
     9         }
    10         return "success";
    11     }

    对于 多文件上传,接收文件属性为数组格式, 文件名称也为数组格式,提供set get方法

     1 public String uploads() {
     2         ServletContext servletContext = ServletActionContext.getServletContext();
     3         for(int i=0;i<file.length;i++) {
     4             String realPath = servletContext.getRealPath("/");
     5             realPath = realPath +"/upload"+ "/" + fileFileName[i];
     6             try {
     7                 FileUtils.copyFile(file[i], new File(realPath));
     8             } catch (IOException e) {
     9                 e.printStackTrace();
    10             }
    11         }
    12         return "success";
    13     }

    限制上传文件格式,利用拦截器

    <action name="up" class="com.tx.action.UploadAction" method="upload">
            <!-- 主动引入拦截器 ,设置上传文件类型位jpg  txt格式-->
                <interceptor-ref name="defaultStack">
                    <param name="fileUpload.allowedExtensions">.jpg,.txt</param>
                    <!-- <param name="fileUpload.maximumSize">1048576</param> -->
                </interceptor-ref>
                <result name="success">/success.jsp</result>
                <result name="input">/form.jsp</result>
            </action>

    对于文件上传大小的中文显示,需要配置国际化文件,建立国际化文件并在struts2中设置

    <!-- 配置文件大小限制 -->
        <constant name="struts.multipart.maxSize" value="1048576"></constant>
        <!-- 配置国际化 -->
        <constant name="struts.custom.i18n.resources" value="com/tx/resource/msg_zh_CN"></constant>

    二、文件下载

      创建Action类,必须有三个属性:  提供输入流的属性inputStream(名称固定)  、文件名  fileName、 int类型文件大小 filelength ,提供set get方法

      

     1 public String download() throws Exception {
     2         ServletContext servletContext = ServletActionContext.getServletContext();
     3         String realPath = servletContext.getRealPath("/upload/1.jpg");
     4         //实例化输入流
     5         inputStream = new FileInputStream(new File(realPath));
     6         //给fileName赋值
     7         fileName = FilenameUtils.getName(realPath);
     8         //对文件名编码
     9         fileName = URLEncoder.encode(fileName, "UTF-8");
    10         //给filelength赋值
    11         filelength = inputStream.available();
    12         return "success";
    13     }

      再在xml文件中配置

     1 <action name="down" class="com.tx.action.DownloadAction" method="download">
     2             <result name="success" type="stream">
     3                 <!-- 指定Action中输入流变量 -->
     4                 <param name="inputStream">inputStream</param>
     5                 <!-- 设置响应的消息头 -->
     6                 <param name="contentDisposition">attachment;filename=${fileName}</param>
     7                 <!-- 使用下载的方式返回结果 -->
     8                 <param name="contentType">application/octet-stream</param>
     9                 <!-- 配置文件大小 -->
    10                 <param name="contentLength">${filelength}</param>
    11             </result>
    12         </action>
  • 相关阅读:
    设计模式学习--------8.抽象工厂模式学习
    设计模式学习--------7.工厂方法模式学习
    算法学习---对象类型的数组二分查找实现
    算法学习---基本数据类型的数组二分查找实现
    设计模式学习--------6.单例模式学习
    设计模式学习--------5.适配器模式学习
    tomcat 部署指南
    《Tomcat权威指南》读书笔记
    字典排序
    zabbix agentd错误日志解决办法
  • 原文地址:https://www.cnblogs.com/cat-fish6/p/8646115.html
Copyright © 2020-2023  润新知