您的位置:首页 > 编程语言 > Java开发

Struts2 文件上传

2015-12-15 22:45 417 查看
一:表单准备

① 要想使用HTML
表单上传一个或多个文件
–须把 HTML表单的
enctype属性设置为multipart/form-data
–须把HTML
表单的method 属性设置为post
–需添加<inputtype=“file”>字段.
二:Struts2 文件上传原理以及步骤:

① 在Struts应用程序里,FileUpload拦截器和Jakarta
Commons FileUpload组件可以完成文件的上传.
② 步骤:
–1.在
Jsp页面的文件上传表单里使用
file 标签.如果需要一次上传多个文件,
就必须使用多个 file
标签,但它们的名字必须是相同的
–2.在
Action 中新添加 3个和文件上传相关的属性.
这 3 个属性的名字必须是以下格式
[FileName] : File -被上传的文件。例如:data
[FileName]ContentType : String -上传文件的文件类型。例如:dataContentType
[FileName]FileName : String -上传文件的文件名。例如:dataFileName
如果上上传多个文件,可以使用List
③ 简单文件上传示例:

表单页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
<form action="upload" enctype="multipart/form-data" method="post">
请选择文件:<input type="file" name="uploadFile">
<input type="submit" value="上传"/>
</form>
</body>
</html>
后台上传处理Action:

package com.elgin.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.servlet.ServletContext;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {

/**
*
*/
private static final long serialVersionUID = 1L;

private File uploadFile;

//注意如下2个成员变量的命名形式
private String uploadFileFileName;
private String uploadFileContentType;

public File getUploadFile() {
return uploadFile;
}

public void setUploadFile(File uploadFile) {
this.uploadFile = uploadFile;
}

public String getUploadFileFileName() {
return uploadFileFileName;
}

public void setUploadFileFileName(String uploadFileFileName) {
this.uploadFileFileName = uploadFileFileName;
}

public String getUploadFileContentType() {
return uploadFileContentType;
}

public void setUploadFileContentType(String uploadFileContentType) {
this.uploadFileContentType = uploadFileContentType;
}

public String execute() {
ServletContext servletContext = ServletActionContext.getServletContext();
String desdir = servletContext.getRealPath("/UploadFiles/" + uploadFileFileName);
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(uploadFile);
fos = new FileOutputStream(desdir);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return SUCCESS;
}
}
struts.xml 配置文件:

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<package name="com" extends="struts-default">
<action name="upload" class="com.elgin.action.UploadAction">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
④ 如果在文件上传时需要增加相关限制条件,如文件大小、类型以及扩展名 ,可以通过给 FileUpload 拦截器配置参数来实现

FileUpload拦截器有3
个属性可以设置.
–maximumSize:上传单个文件的最大长度(以字节为单位),默认值为
2 MB
–allowedTypes:允许上传文件的类型,
各类型之间以逗号分隔
–allowedExtensions:允许上传文件扩展名,
各扩展名之间以逗号分隔
–可以在 struts.xml文件中覆盖这
3 个属性
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>

<package name="com" extends="struts-default">

<interceptors >
<interceptor-stack name="fileLimit">
<interceptor-ref name="defaultStack">
<!-- 允许上传的最大文件大小 -->
<param name="fileUpload.maximumSize">1048576</param>
<!-- 允许上传的文件类型 -->
<param name="fileUpload.allowedTypes">text/html,application/msword</param>
<!-- 允许上传的文件扩展名 -->
<param name="fileUpload.allowedExtensions">html,xml,doc</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>

<default-interceptor-ref name="fileLimit"></default-interceptor-ref>

<action name="upload" class="com.elgin.action.UploadAction">
<result name="success">/success.jsp</result>
<result name="input">/uploadFile.jsp</result>
</action>

</package>
</struts>
并且可以在国际化资源文件中定制错误消息:

struts.messages.error.uploading - 文件上传出错的消息

struts.messages.error.file.too.large - 文件超过最大值的消息

struts.messages.error.content.type.not.allowed - 文件内容类型不合法的消息

struts.messages.error.file.extension.not.allowed - 文件扩展名不合法的消息

问题: 此种方式定制的消息并不完善. 可以参考 org.apache.struts2 下的 struts-messages.properties, 可以提供更多的定制信息.

注意: 在 org.apache.struts2 下的 default.properties 中有对上传的文件总的大小的限制. 可以使用常量的方式来修改该限制

struts.multipart.maxSize=2097152
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: