1. Struts2在进行文件上传操作时,实际上是上是通过两个步骤实现的。
a) 首先将客户端上传的文件保存到struts.multipart.saveDir键所指定的目录中,如果该键所指定的目录不存在,那么就保到javax.servlet.context.tempdir环境变量所指定的目录中。
b) Action中所定义的File类型的成员变量实际上指向的是临时目录中的临时文件,然后在服务器端通过IO的方式将临时文件写入到指定的服务器端目录中。
2. 文件上传大小控制
a) 在struts.properties中设置
struts.multipart.maxSize=10485760
b) 在struts.xml中配置属性
<constant name="struts.multipart.maxSize" value="10485760"></constant>
3. Struts2的文件上传实际上是通过FileUpLoadInerceptor拦截器来处理的。例1,使用struts2实现文件上传。
a)建立文件上传界面upfile.jsp
<form action="fileUpAction" method="post" enctype="multipart/form-data">
username:<input type="text" name="username"/><br/>
<input type="file" name="file"><br/>
<input type="submit" value="submit"/>
</form>
b)在struts.xml中配置对应的action类
<action name="fileUpAction" class="com.ebuair.struts2.FileUpAction">
<resultname="success">/fileUploadResult.jsp</result>
<resultname="input">/upfile.jsp</result>
</action>
c)建立处理文件上传的处理类FileUpAction
private String username;
private File file;
private String fileFileName; //固定的命名规则
private String fileContentType; //固定的命名规则
......//get、set方法
@Override
public String execute()throws Exception {
String root =ServletActionContext.getRequest().getRealPath("/upfile");
InputStream is = new FileInputStream(file);
File destFile = newFile(root,fileFileName);
System.out.println("fileContextType:"+ fileContentType);
OutputStream os =new FileOutputStream(destFile);
byte[] buffer = newbyte[400];
int length = 0;
while(-1 != (length= is.read(buffer))){
os.write(buffer,0,length);
}
is.close();
os.close();
return SUCCESS;
d)显示文件上传的结果页面fileuploadresult.jsp
username: <s:property value="username"/><br/>
fileName: <s:propertyvalue="fileFileName"/><br/>
fileContentType:<s:property value="fileContentType"/>
例2,使用struts2实现多文件上传
a)建立多文件上传界面upfiles.jsp
<formaction="filesUpAction" method="post"enctype="multipart/form-data" >
username: <inputtype="text" name="username"/><br/>
file1: <inputtype="file" name="file"/><br/>
file2: <inputtype="file" name="file"/><br/>
file3: <inputtype="file" name="file"/><br/>
<inputtype="submit" value="submit"/>"
</form>
f) 在struts.xml中配置对应的action类
<action name="filesUpAction"class="com.ebuair.struts2.FilesUpAction">
<result name="success">/filesUploadResult.jsp</result>
<result name="input">/upfiles.jsp</result>
</action>
g)建立处理文件上传的处理类FilesUpAction
private String username;
List<File> file ;
List<String>fileFileName;
List<String>fileContentType;
@Override
public String execute()throws Exception {
String root =ServletActionContext.getRequest().getRealPath("/upfile");
for(int i = 0; i< file.size(); i++){
InputStreamis = new FileInputStream(file.get(i));
File destFile= new File(root,fileFileName.get(i));
OutputStreamos = new FileOutputStream(destFile);
byte[] buffer= new byte[400];
int length =0;
while(-1 !=(length = is.read(buffer))){
os.write(buffer,0,length);
}
is.close();
os.close();
}
return SUCCESS;
}
h)显示文件上传的结果页面fileuploadresulst.jsp
username: <s:propertyvalue="username"/><br/>
<s:iterator value="fileFileName" id="fileName"> <!-- 迭代-->
fileName:<s:property value="#fileName"/><br/>
</s:iterator>