Struts2 : [5] 上传单个文件

  • Struts2的上传组件是一个拦截器(这个拦截器不用配置,是自动装载的)。
  • 要用Struts2实现上传单个文件的功能非常容易实现,只要使用普通的Action即可。但为了获得一些上传文件的信息,如上传文件名、上传文件类型以及上传文件的Stream对象,就需要按着一定规则来为Action类增加一些getter和setter方法。
  • 在Struts2中,用于获得和设置java.io.File对象(Struts2将文件上传到临时路径,并使用java.io.File打开这个临时文件)的方法是getUpload和setUpload。获得和设置文件名的方法是getUploadFileName和setUploadFileName,获得和设置上传文件内容类型的方法是getUploadContentType和setUploadContentType。

一、UploadAction.java

package action;

import java.io.File;
import com.opensymphony.xwork2.ActionSupport;

/**
 * @author ZhangGuoLi
 * @date 2015年8月4日
 * @version
 */
public class UploadAction extends ActionSupport {
    private File upload;
    private String uploadFileName;
    private String uploadContentType;// 上传文件内容类型

    int defaultsize = 2097152;
    public File getUpload() {
        return upload;
    }

    public void setUpload(File upload) {
        this.upload = upload;
    }

    public String getUploadFileName() {
        return uploadFileName;
    }

    public void setUploadFileName(String uploadFileName) {
        this.uploadFileName = uploadFileName;
    }

    public String getUploadContentType() {
        return uploadContentType;
    }

    public void setUploadContentType(String uploadContentType) {
        this.uploadContentType = uploadContentType;
    }

    @Override
    public String execute() throws Exception {//按uploadfile方法返回值处理
        if (uploadFile().equals("toobig")==true){
         return "toobig";
        }
        if(uploadFile().equals("success")==true){
            return SUCCESS;
        }
        if(uploadFile().equals("failure")){
            return "failure";
        }
        return null;
    }

    public String uploadFile() {// 上传是否成功,从临时文件复制到指定的路径
        try {
            System.out.println(upload.length());//上传文件的大小,单位B
            if(upload.length()>defaultsize){
                return "toobig";
            }
            java.io.InputStream is = new java.io.FileInputStream(upload);
            java.io.OutputStream os = new java.io.FileOutputStream("d:\\upload\\" + uploadFileName);// 最终保存路径
            
            byte buffer[] = new byte[4096];
            int count = 0;
            while ((count = is.read(buffer)) > 0) {
                os.write(buffer, 0, count);
            }
            os.close();
            is.close();
            return "success";
        } catch (Exception ex) {
            ex.printStackTrace();
            return "failure";
        }
    }
}

二、uploadfile.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>单文件上传页面</title>
</head>
<body>
    <s:form action="upload" namespace="/mystruts" enctype="multipart/form-data" method="POST">
        <s:file name="upload" label="请选择需要上传的文件(大小限制在2MB):"></s:file>
        <s:submit value="上传"></s:submit>
    </s:form>
</body>
</html>

表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的其他操作.

三、配置Struts.xml

此处也可以选择配置struts.properties,需自行新建

<?xml version="1.0" encoding= "UTF-8" ?>
<!DOCTYPE struts PUBLIC
      "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
      "http://struts.apache.org/dtds/struts-2.0.dtd" >
<struts>
<constant name="struts.multipart.maxSize" value="204800000"></constant>
    <constant name="struts.multipart.saveDir" value="E:\\upload\\"></constant>
    <package name="strutsupload" namespace="/mystruts" extends="struts-default">
        <action name="upload" class="action.UploadAction">
            <result name="toobig">/uploadfile.jsp</result>
            <result name="success">/upload_success.jsp</result>
            <result name="failure">/failue.jsp</result>
        </action>
    </package>
</struts>

struts.multipart.maxSize是允许上传的文件大小,默认是2MB
struts.multipart.saveDir是保存路径
struts.properties常用配置可以点这里查看

四、相关跳转页面

1.upload_success.jsp页面通过** < s:property value="uploadFileName"/> ** 获取上传文件的文件名
2.failure.jsp是失败跳转页面。

标签: Java, Struts2, upload, 上传文件, 拦截器

相关文章推荐: