Struts上路_11-文件上传

1.简单示例:

1)请求路径:

<body>
	<!--
		enctype设置表单的MIME编码。
		默认application/x-www-form-urlencoded,不能用于文件上传;
		使用multipart/form-data,才能完整的传递文件数据
	-->
	<form action="${ pageContext.request.contextPath }/pkgUpload/ActionUpload_upload.action" 
     method="post"
     enctype="multipart/form-data">
		照片:<input type="file" name="userImg"> <br>
		<input type="submit" value="上传">
	</form>
</body>


2Action处理类:

package cn.cvu.action;

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

public class ActionUpload extends ActionSupport {
	// 类型须和jsp页面中的input的type相同,变量名须和那么相同。上传的临时目录
	private File userImg;
	// 上面的变量名紧跟FileName。源文件名称
	private String userImgFileName;
	// 上面的变量名紧跟ContentType。源文件类型
	private String userImgContentType;

	public String upload() {

		// 1.获取服务器根路径作为目标目录
		ServletContext servletContext = ServletActionContext
				.getServletContext();
		String realPath = servletContext.getRealPath("/");

		// 2.在目标目录 创建既定名称的空文件
		File file = new File(realPath, userImgFileName);

		// 3.在文件中写入既定数据
		FileUtils.copyFile(userImg, file);

		// 4.删除临时文件
		//userImg.delete();

		return "success";
	}

	public File getUserImg() {。。。}
	public void setUserImg(File userImg) {。。。}
	public String getUserImgContentType() {。。。}
	public void setUserImgContentType(String userImgContentType) {。。。}
	public String getUserImgFileName() {。。。}
	public void setUserImgFileName(String userImgFileName) {。。。}
}


3)测试:

Struts上路_11-文件上传_第1张图片 


2.上传文件大小限制:

1struts.xml

Struts上路_11-文件上传_第2张图片


2)错误页面:


3)上传测试:


4)在struts.xml配置最大文件体积:

<constant name="struts.multipart.maxSize" value="20971520"></constant> 


5)测试:


3.上传文件格式要求:

1struts.xml中配置文件类型:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>

	<!-- 默认2M。value单位是byte。相对于action中的maximumSize,这里是整个硬盘容量 -->
	<constant name="struts.multipart.maxSize" value="20971520"></constant>

	<package name="pkgUpload" namespace="/pkgUpload" extends="struts-default">
		<action name="ActionUpload_upload" class="cn.cvu.action.ActionUpload" method="upload">
			<result name="success">/success_upload.jsp</result>
			<result name="input">/size_error.jsp</result>
			
			<interceptor-ref name="defaultStack">
				<!-- 相对struts.multipart.maxSize这里是分区容量,在本action有效。最终两个值中最小的为作用值 -->
				<param name="fileUpload.maximumSize">2097152</param>
  <!-- 有文件类型而没有对应的文件后缀也可以上传 -->
				<param name="fileUpload.allowedTypes">text/plain,image/pjpeg</param>
				<param name="fileUpload.extendsions">.txt,.jpg</param>
			</interceptor-ref>
		</action>
	</package>
	<!-- 文件格式:
	图片:image/pjpeg,image/bmp,image/x-png
	chm:application/octet-stream
	pdf:application/pdf
	rar:application/octet-stream
	zip:application/x-zip-compressed
	wps-doc:application/octet-stream
	--> 
</struts>


2)错误提示页面:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%> 
<html>
<body>
	上传失败,<s:fielderror></s:fielderror>
</body>
</html>


3)测试:

(1)类型错误: 

· Content-Type not allowed: userImg "无标题.bmp" "upload_0dc8e97a_fed0_48ad_bd5c_4f6431ff8e0e_00000000.tmp" image/bmp

(2)文件太大:

· The file is to large to be uploaded: userImg "Mahout.in.Action.txt" "upload_7951f2fa_37b5_4e02_ad64_7ad3dfd07057_00000000.tmp" 13988678


4.自定义上传文件错误提示:

1)创建配置文件:

struts.messages.error.uploading=\u4E0A\u4F20\u9519\u8BEF\:{0}
struts.messages.error.file.too.large=\u6587\u4EF6\u592A\u5927\u3002\u53D8\u91CF\u540D\uFF1A{0}\uFF0C\u6587\u4EF6\u540D\uFF1A"{1}"\uFF0C\u4E34\u65F6\u6587\u4EF6\uFF1A"{2}"\uFF0C\u6587\u4EF6\u7C7B\u578B\uFF1A{3}
struts.messages.error.content.type.not.allowed=\u4E0D\u652F\u6301\u7684\u6587\u4EF6\u7C7B\u578B\u3002\u53D8\u91CF\u540D\uFF1A{0}\uFF0C\u6587\u4EF6\u540D\uFF1A"{1}"\uFF0C\u4E34\u65F6\u6587\u4EF6\uFF1A"{2}"\uFF0C\u6587\u4EF6\u7C7B\u578B\uFF1A{3}
struts.messages.error.file.extension.not.allowed=\u4E0D\u652F\u6301\u7684\u6587\u4EF6\u6269\u5C55\u540D\u3002\u53D8\u91CF\u540D\uFF1A{0}\uFF0C\u6587\u4EF6\u540D\uFF1A"{1}"\uFF0C\u4E34\u65F6\u6587\u4EF6\uFF1A"{2}"\uFF0C\u6587\u4EF6\u7C7B\u578B\uFF1A{3}


2)在struts.xml中引入:

<struts>

	<!-- 引入自定义资源文件。value=“自定义错误提示文件” -->
	<constant name="struts.custom.i18n.resources" value="cn.cvu.action.fileuploaderror"></constant>

	<package name="pkgUpload" namespace="/pkgUpload" extends="struts-default">
		。。。伪代码。。。
	</package>
</struts>


3)测试:


5.多文件上传:

1)请求页面:

保证typename都一致。

Struts上路_11-文件上传_第3张图片


2Action类:

package cn.cvu.action;

import java.io.File;
import java.io.IOException;
import javax.servlet.ServletContext;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class ActionUpload extends ActionSupport {
	// 上传的临时文件数组,保存多个文件 
	private File[] userImg;
	// 源文件名称【】
	private String[] userImgFileName;
	// 源文件类型【】
	private String[] userImgContentType;

	public String upload() throws IOException {

		// 1.获取服务器根路径作为目标目录
		ServletContext servletContext = ServletActionContext.getServletContext();
		String realPath = servletContext.getRealPath("/");

		//遍历全部的文件
		for (int i = 0; i < userImg.length; i++) {
			// 2.在目标目录 创建既定名称的空文件
			File file = new File(realPath, userImgFileName[i]);

			// 3.在文件中写入既定数据
			FileUtils.copyFile(userImg[i], file);
			
			// 4.删除临时文件
			//userImg.delete();
		}

		return "success";
	}

	public File[] getUserImg() {。。。}
	public void setUserImg(File[] userImg) {。。。}
	public String[] getUserImgFileName() {。。。}
	public void setUserImgFileName(String[] userImgFileName) {。。。}
	public String[] getUserImgContentType() {。。。}
	public void setUserImgContentType(String[] userImgContentType) {。。。}

}


3)测试:

此时有一个不满足条件即全部上传失败。
Struts上路_11-文件上传_第4张图片

Struts上路_11-文件上传_第5张图片

- end

你可能感兴趣的:(mvc,struts,struts2,javaweb,Webwork)