zoukankan      html  css  js  c++  java
  • Struts2文件上传(基于表单的文件上传)

    •Commons-FileUpload组件
    –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目
     
    •Commons-FileUpload组件特点
    –使用简单:可以方便地嵌入到JSP文件中,编写少量代码即可完成文件的上传功能
    –能够全程控制上传内容
    –能够对上传文件的大小、类型进行控制
     
    •需要下载Common-FileUplaod框架地址(当然MyEclipce中Struts2支持里自带有这两个包)
    –下载commons-fileupload-1.2-bin.zip文件
    –解压后得到commons-fileupload-1.2.jar
     
    –下载commons-io-1.3.2-bin.zip文件
    –解压后得到commons-io-1.3.2.jar
     
     

    基于表单的文件上传
     
    •注意:上面是基于表单的上传,在form标签中有一个必须的属性值设置:enctype.
     
    •如果要做文件上传功能必须将enctype值设为multipart/form-data.
     
    •此外,文件上传还需要二个JAR文件支持:


    文件上传页面upload.jsp(二选一表单即可)
    <%@ taglib uri="/struts-tags" prefix="s"%>
    
        <body>
            <form action="uploads" method="post" enctype="multipart/form-data">
                文件:
                <input type="file" name="uploadImage">
                <input type="submit" value="提交">
            </form>
            或者(两个表单二选一即可)
            <s:form action="uploads" method="post" enctype="multipart/form-data">
                <s:file name=“uploadImage " label="选择上传的文件" />
                <s:submit value="上传" />
            </s:form>
        </body>
     
    Struts2.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>
        <!-- 要注意Struts2默认文件上传最大为2M即便你设置了<param name="maximumSize">5242880</param>
              当上传的文件大于2M时候也会出错的这时要设置,另外一个常量
        <constant name="struts.multipart.maxSize" value="1000000000"/> -->
        
        <package name="Struts2" extends="struts-default" namespace="/">
    
            <action name="uploads" class="com.struts.UploadAction">
    
                <!-- 指定(限制)上传文件的类型,定义局部拦截器,修改默认拦截器的属性 
                    "fileUpload.maximumSize" :限制上传最大的文件大小。 
                    "fileUpload.allowedTypes":允许上传文件的类型。 
                    "fileUpload.allowedExtensions":允许上传文件的可扩展文件类型。 -->
                <interceptor-ref name="defaultStack">
                    <param name="fileUpload.maximumSize">500000000</param>
                    <param name="fileUpload.allowedTypes">text/plain,application/vnd.ms-powerpoint</param>
                    <param name="fileUpload.allowedExtensions">.txt,.ppt</param>
                </interceptor-ref>
    
                <result>/success.jsp</result>
                <!-- 出现错误自动会返回input结果,进入结果视图 -->
                <result name="input" >/error.jsp</result>
            </action>
        </package>
    </struts>    

     附加:contentType类型设置

    上传Action类UploadAction-简单的保存文件方式
    package com.struts;
    
    import java.io.File;
    import java.io.IOException;
    
    import org.apache.commons.io.FileUtils;
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class UploadAction extends ActionSupport {
    
        private File uploadImage; //得到上传的文件
        private String uploadImageContentType; //得到文件的类型
        private String uploadImageFileName; //得到文件的名称
        
        public String execute(){
            System.out.println("fileName:"+this.getUploadImageFileName());
            System.out.println("contentType:"+this.getUploadImageContentType());
            System.out.println("File:"+this.getUploadImage());
            
            //获取要保存文件夹的物理路径(绝对路径)
            String realPath=ServletActionContext.getServletContext().getRealPath("/upload");
            File file = new File(realPath);
            
            //测试此抽象路径名表示的文件或目录是否存在。若不存在,创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
            if(!file.exists())file.mkdirs();
            
            try {
                //保存文件
                FileUtils.copyFile(uploadImage, new File(file,uploadImageFileName));
            } catch (IOException e) {
                e.printStackTrace();
            }
            return SUCCESS;
        }
    
        public File getUploadImage() {
            return uploadImage;
        }
    
        public void setUploadImage(File uploadImage) {
            this.uploadImage = uploadImage;
        }
    
        public String getUploadImageContentType() {
            return uploadImageContentType;
        }
    
        public void setUploadImageContentType(String uploadImageContentType) {
            this.uploadImageContentType = uploadImageContentType;
        }
    
        public String getUploadImageFileName() {
            return uploadImageFileName;
        }
    
        public void setUploadImageFileName(String uploadImageFileName) {
            this.uploadImageFileName = uploadImageFileName;
        }
        
    }

    上传成功页面:

      <body>
            成功页面. <br>
      </body>

    上传失败页面:

    <!-- 引入struts2的标签库 -->
    <%@ taglib uri="/struts-tags" prefix="s"%>
    
      <body>
            跳转错误页面。。<br>
            <!-- fielderror标签输出action的fieldErrors属性保存的字段错误,fieldErrors是一个map类型的属性。 -->
            <s:fielderror />
            <!-- 生产一个查看debug信息的链接 -->
            <s:debug />
      </body>
     
     
  • 相关阅读:
    codeforces 669C C. Little Artem and Matrix(水题)
    codeforces 669B B. Little Artem and Grasshopper(水题)
    oracle drop table recyclebin恢复
    odu恢复drop表--不通过logmnr挖掘object_id
    odu恢复drop表--通过logmnr挖掘object_id
    odu恢复delete 表
    GO学习-(7) Go语言基础之流程控制
    GO学习-(6) Go语言基础之运算符
    GO学习-(4) Go语言基础之变量和常量
    GO学习-(3) VS Code配置Go语言开发环境
  • 原文地址:https://www.cnblogs.com/wkrbky/p/5904787.html
Copyright © 2011-2022 走看看