Struts2文件上传(基于表单的文件上传)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>

 

 
 

以上是关于Struts2文件上传(基于表单的文件上传)的主要内容,如果未能解决你的问题,请参考以下文章

(25) java web的struts2框架的使用-基于表单的文件上传

Struts2 文件上传

struts2-文件上传

struts2文件上传

工作笔记4.struts2上传文件到server

Struts2文件上传实例