zoukankan      html  css  js  c++  java
  • Struts2(五)

    以下内容是基于导入struts2-2.3.32.jar包来讲的

    1.文件上传

    A.单文件上传

    <body>
        <form action="${pageContext.request.contextPath }/one" method="post" enctype="multipart/form-data">
            <input type="file" name="file"/>
            <input type="submit" value="上传"/>
        </form>
    </body>
     1 package com.rong.web.action;
     2 
     3 import java.io.File;
     4 
     5 import org.apache.commons.io.FileUtils;
     6 
     7 import com.opensymphony.xwork2.ActionSupport;
     8 
     9 public class MyAction extends ActionSupport {
    10     private static final long serialVersionUID = -351587239525292420L;
    11     //保存上传的文件对象,file对应表单元素名称,名称必须一致,拦截器会解析这个格式!
    12     private    File file;
    13     //文件名,必须为fileFileName
        //FileName 固定的写法。必须为file+FileName
    14 private String fileFileName; 15 //ContentType 固定的写法。必须为file+ContentType 16 private String fileContentType; 17 public File getFile() { 18 return file; 19 } 20 public void setFile(File file) { 21 this.file = file; 22 } 23 24 public String getFileFileName() { 25 return fileFileName; 26 } 27 public void setFileFileName(String fileFileName) { 28 this.fileFileName = fileFileName; 29 } 30 public String getFileContentType() { 31 return fileContentType; 32 } 33 public void setFileContentType(String fileContentType) { 34 this.fileContentType = fileContentType; 35 } 36 @Override 37 public String execute() throws Exception { 38 //E:apache-tomcat-7.0.82workCatalinalocalhoststruts2 upload_1742945b_24ed_4612_a2f4_b83cffa61620_00000000.tmp 39 //struts会保存到Tomcat服务器的struts2文件夹中创建临时文件,若不处理,执行完代码会把此临时文件删除 40 System.out.println(file.getAbsolutePath()); 41 //butterfly.jpg 42 System.out.println(fileFileName); 43 //image/png 44 System.out.println(fileContentType); 45 File targetFile=new File("c:/", fileFileName); 46 FileUtils.copyFile(file, targetFile); 47 return SUCCESS; 48 } 49 }

    文件类型: mime-type想了解的可以去Tomcat服务器的web.xml文件查看,里面有文件类型配置

    E:apache-tomcat-7.0.82confweb.xml

    限制文件上传大小:

    org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (81498) exceeds the configured maximum (1024)

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <!-- 配置限制文件上传大小为1K -->
        <constant name="struts.multipart.maxSize" value="1024"></constant>
        <package name="default" namespace="/" extends="struts-default" >
            
            <global-results>
                <!-- struts在文件上传失败的时候,会返回input的错误视图,在这里配置对应的页面! -->
                <result name="input">/input.jsp</result>
                <result name="error">/error.jsp</result>
            </global-results>
            <global-exception-mappings>
                <exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
            </global-exception-mappings>
            <action name="one" class="com.rong.web.action.MyAction">
                <result>/one.jsp</result>
            </action>
        </package>
    </struts>

    B.多文件上传

    input的name属性值必须一致

    <body>
        <form action="${pageContext.request.contextPath }/one" method="post" enctype="multipart/form-data">
            <input type="file" name="file"/>
            <input type="file" name="file"/>
            <input type="file" name="file"/>
            <input type="submit" value="上传"/>
        </form>
    </body>
     1 package com.rong.web.action;
     2 
     3 import java.io.File;
     4 
     5 import org.apache.commons.io.FileUtils;
     6 
     7 import com.opensymphony.xwork2.ActionSupport;
     8 
     9 public class MyAction extends ActionSupport {
    10     private static final long serialVersionUID = -351587239525292420L;
    11     //保存上传的文件对象,file对应表单元素名称,名称必须一致,拦截器会解析这个格式!
    12     private    File[] file;
    13     //文件名,必须为fileFileName
    14     private String[] fileFileName;
    15     //文件类型,必须为fileContentType
    16     private String[] fileContentType;
    17     
    18     public File[] getFile() {
    19         return file;
    20     }
    21 
    22     public void setFile(File[] file) {
    23         this.file = file;
    24     }
    25 
    26     public String[] getFileFileName() {
    27         return fileFileName;
    28     }
    29 
    30     public void setFileFileName(String[] fileFileName) {
    31         this.fileFileName = fileFileName;
    32     }
    33 
    34     public String[] getFileContentType() {
    35         return fileContentType;
    36     }
    37 
    38     public void setFileContentType(String[] fileContentType) {
    39         this.fileContentType = fileContentType;
    40     }
    41 
    42     @Override
    43     public String execute() throws Exception {
    44         if(file!=null){
    45             for(int i=0;i<file.length;i++){
    46                 System.out.println(file[i]);
    47                 System.out.println(fileFileName[i]);
    48                 System.out.println(fileContentType[i]);
    49                 File targetFile=new File("c:/", fileFileName[i]);
    50                 FileUtils.copyFile(file[i], targetFile);
    51             }
    52         }
    53         return SUCCESS;
    54     }
    55 }
    E:apache-tomcat-7.0.82workCatalinalocalhoststruts2upload_ca4933df_aa32_4fc4_bbd5_d5d887c68972_00000006.tmp
    2018届毕业设计2017-6-8.rar
    application/octet-stream
    E:apache-tomcat-7.0.82workCatalinalocalhoststruts2upload_ca4933df_aa32_4fc4_bbd5_d5d887c68972_00000007.tmp
    nio1.png
    image/png
    E:apache-tomcat-7.0.82workCatalinalocalhoststruts2upload_ca4933df_aa32_4fc4_bbd5_d5d887c68972_00000008.tmp
    容杰龙.docx
    application/vnd.openxmlformats-officedocument.wordprocessingml.document
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <!-- 配置限制文件上传大小为1000k -->
        <constant name="struts.multipart.maxSize" value="10240000"></constant>
        <package name="default" namespace="/" extends="struts-default" >
            
            <global-results>
                <!-- struts在文件上传失败的时候,会返回input的错误视图,在这里配置对应的页面! -->
                <result name="input">/input.jsp</result>
                <result name="error">/error.jsp</result>
            </global-results>
            <global-exception-mappings>
                <exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
            </global-exception-mappings>
            <action name="one" class="com.rong.web.action.MyAction">
                <result>/one.jsp</result>
            </action>
        </package>
    </struts>

    限制允许上传的文件类型以及文件扩展名:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <!-- 配置限制文件上传大小为1000k -->
        <constant name="struts.multipart.maxSize" value="10240000"></constant>
        <package name="default" namespace="/" extends="struts-default" >
            
            <global-results>
                <!-- struts在文件上传失败的时候,会返回input的错误视图,在这里配置对应的页面! -->
                <result name="input">/input.jsp</result>
                <result name="error">/error.jsp</result>
            </global-results>
            <global-exception-mappings>
                <exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
            </global-exception-mappings>
            <action name="one" class="com.rong.web.action.MyAction">
                <!-- Action里设置默认拦截器栈 -->
                <interceptor-ref name="defaultStack">
                    <!-- 限制允许上传的文件类型 -->
                    <param name="fileUpload.allowedTypes">image/png,text/plain</param>
                    <!-- 限制上传文件的扩展名 -->
                    <param name="fileUpload.allowedExtensions">txt,png,docx</param>
                    <!-- 以上两个参数同时配置取交集 -->
                </interceptor-ref>
                <result>/one.jsp</result>
            </action>
            
        </package>
    </struts>

     如果出现异常,上传失败,却无法弹出jsp页面,可在Tomcat服务器的server.xml文件中修改:

    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8" maxSwallowSize="-1"/>

     2.文件下载

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <package name="default" namespace="/" extends="struts-default" >
            <action name="download" class="com.rong.web.action.MyAction">
                <!-- 下载操作,name可以随意,但需要与返回值对应。type类型唯一。 -->
                <result name="down" type="stream">
                    <!-- 文件的类型,指定为任意二进制类型,可以标识任何文件 -->
                    <param name="contentType">application/octet-stream</param>
                    <!-- 对应的是Action类中返回流的属性!对应getFileStream()方法 -->
                    <param name="inputName">fileStream</param>
                    <!-- 指定浏览器显示的文件名,对应action类中的返回文件名的属性!需要url编码,对应getDownFile()方法 -->
                    <param name="contentDisposition">attachment;filename=${downFile}</param>
                    <!-- 读取缓冲区大小 -->
                    <param name="bufferSize">1024</param>
                </result>
            </action>
        </package>
    </struts>
     1 package com.rong.web.action;
     2 
     3 import java.io.File;
     4 import java.io.FileInputStream;
     5 import java.io.FileNotFoundException;
     6 import java.io.InputStream;
     7 import java.io.UnsupportedEncodingException;
     8 import java.net.URLEncoder;
     9 
    10 import com.opensymphony.xwork2.ActionSupport;
    11 
    12 public class MyAction extends ActionSupport {
    13     private static final long serialVersionUID = -351587239525292420L;
    14     private String filePath;
    15     public String getFilePath() {
    16         return filePath;
    17     }
    18     public void setFilePath(String filePath) {
    19         this.filePath = filePath;
    20     }
    21     @Override
    22     public String execute() throws Exception {
    23         //实际开发中,用户只要传文件路径即可实现下载,这里固定路径。
    24         filePath="C:/2017.11.17-广州市部份培训公司名单.docx";
    25         return "down";
    26     }
    27     //返回流<param name="inputName">fileStream</param>
    28     public InputStream getFileStream() throws FileNotFoundException{
    29         return new FileInputStream(filePath);
    30     }
    31     //<param name="contentDisposition">attachment;filename=${downFile}</param>
    32     public String getDownFile() throws UnsupportedEncodingException{
    33         File file=new File(filePath);
    34         String name = file.getName();
    35         return URLEncoder.encode(name, "UTF-8");
    36     }
    37 }
  • 相关阅读:
    centos6 LVS-DR模式---分析
    centos6.6 安装 LXC
    Amoeba-mysql读写分离实战
    keepalived +mysql 实战
    nginx添加sticky模块-cookie保持会话
    haproxy转发真实IP给web
    Mysql-如何正确的使用索引以及索引的原理
    Mysql-自带的一些功能,基本用法(视图,触发器,事务,存储过程,函数,流程控制)
    Mysql-常用数据的基本操作和基本形式
    Mysql-多表连接的操作和用法
  • 原文地址:https://www.cnblogs.com/57rongjielong/p/8178881.html
Copyright © 2011-2022 走看看