一、文件上传快速入门
1)、关于上传表单三要素
>>尽量以POST请求方式上传,因为GET支持文件大小是有限制的。
>>必须要加上enctype="multipart/form-data"表示上传的文件,以随着请求体经过特殊编码后,一同传入服务器
>>每个表单项,必须取一个名字(name),因为服务器端便于通过名字(name)收集信息.
2)、fileUpload拦截器文件上传拦截器,自动注入三个参数,如下所示:
private String uploadContentType;//上传文件的类型,(Fileupload拦截器传入的参数) private File upload;//上传的文件,(Fileupload拦截器传入的参数) private String uploadFileName;//上传文件的真实文件名,(Fileupload拦截器传入的参数)
与jsp页面中的name相对应.
注意:upload和表单项与<s:file>中的name属性一致
upload拼上contentType其中C要大写.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!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>
<s:form action="UploadAction" enctype="multipart/form-data" method="POST">
<s:textfield name="username"/>
<s:file name="upload" />
<s:submit value="提交"/>
</s:form>
</body>
</html>
3)框架自身有fileUpload文件上传拦截器
在默认栈中,有一个fileUpload文件上传拦截器,但是没有下载拦截器,源码参见struts2-core-2.3.16-sources.jar/struts-default.xml
4)、代码分析
UploadAction.java
package action; import java.io.File; import com.opensymphony.xwork2.ActionSupport; /** * @ClassName: UploadAction * @Description: 文件上传 * @author: amosli * @email:amosli@infomorrow.com * @date Jan 14, 2014 1:50:28 AM */ public class UploadAction extends ActionSupport { private static final long serialVersionUID = -8920466592471253212L; private String username;// 用户名 private String uploadContentType;// 上传文件的类型,(Fileupload拦截器传入的参数) private File upload;// 上传的文件,(Fileupload拦截器传入的参数) private String uploadFileName;// 上传文件的真实文件名,(Fileupload拦截器传入的参数) public void setUsername(String username) { this.username = username; } public void setUploadContentType(String uploadContentType) { this.uploadContentType = uploadContentType; } public void setUpload(File upload) { this.upload = upload; } public String getUsername() { return username; } public String getUploadContentType() { return uploadContentType; } public File getUpload() { return upload; } public String getUploadFileName() { return uploadFileName; } public void setUploadFileName(String uploadFileName) { this.uploadFileName = uploadFileName; } public String uploadMethod() { return SUCCESS; } }