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>
     
     
  • 相关阅读:
    SGU 495 Kids and Prizes 概率DP 或 数学推理
    poj 2799 IP Networks 模拟 位运算
    uva 202 Repeating Decimals 模拟
    poj 3158 Kickdown 字符串匹配?
    uva 1595 Symmetry 暴力
    uva 201 Squares 暴力
    uva 1594 Ducci Sequence 哈希
    uva 1368 DNA Consensus String 字符串
    数字、字符串、列表的常用操作
    if条件判断 流程控制
  • 原文地址:https://www.cnblogs.com/wkrbky/p/5904787.html
Copyright © 2011-2022 走看看