struts2 文件上传

网上有很多多文件上传的资料,我只记录需要注意的一点:

jsp页面:

<div>
<font size="10">文件上传</font>
<form action="FileUp" method="post" enctype="multipart/form-data">
<s:file name="upload" size="20"></s:file>
<input type="submit" value="上传">
</form>    
</div>

 

s标签中file的name为upload,那么action中的bean属性就是upload

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

//需要commons-io包和commons-fileupload包

private File upload;//文件名
private String uploadFileName;//设置上传文件的文件名    注意命名规范 "upload"+"FileName"
private String uploadContentType;//上传文件的类型    注意命名规范 "upload"+"ContentType"

//然后就是执行方法了:

public String execute() throws Exception {
//System.out.println(upload.getName());
//System.out.println(uploadFileName);
//System.out.println(uploadContentType);
if(upload!=null&&upload.getName()!=null&&!"".equals(upload.getName())){
String savePath = "uploads";//上传到服务器的哪个文件夹下,这个也可以在xml文件中配置
String realPath = ServletActionContext.getServletContext().getRealPath("/");
savePath = realPath + savePath +"/"+DateUtils.dateFormat(new Date(), "yyyyMMddhhmmss")+ uploadFileName;
File saveFile = new File(savePath);
if(saveFile.getParentFile()!=null&&!saveFile.getParentFile().exists()){
saveFile.getParentFile().mkdirs();//如果父目录不存在则创建
}
FileUtils.copyFile(upload, saveFile);
this.httpReq.setAttribute("uploadMessage", "上传成功!");//不要写upload.message 会把message当做属性
return "SUCCESS";
}
return "UpFailure";
}

 

只要action中属性名对了基本上就能接收到上传的文件名,当然不要忘了get,set方法

多文件上传:

<div>
<font size="10">文件上传</font>
<form action="FilesUp" method="post" enctype="multipart/form-data">
<s:file name="file" size="20"></s:file><br>
<s:file name="file" size="20"></s:file><br>
<s:file name="file" size="20"></s:file><br>
<input type="submit" value="上传">
</form>    
</div>

private List<File> file;
private List<String> fileFileName;
private List<String> fileContentType;


@Override
public String execute() throws Exception {
if(file!=null){
if(file.size()==0){
this.log.info("空文件上传!");
}else{
List<String> filesName = new ArrayList<String>();
for (int i=0;i<file.size();i++) {
if(file.get(i)!=null&&file.get(i).getName()!=null&&!"".equals(file.get(i).getName())){
File saveFile = new File(ServletActionContext.getServletContext().getRealPath("/")+"uploads"+"/"+fileFileName.get(i));
FileUtils.copyFile(file.get(i), saveFile);
filesName.add(fileFileName.get(i));
}else{
this.log.info("第"+i+"个文件为空,无法上传!");
}
}
this.httpReq.setAttribute("upFileMessage", filesName);
return "SUCCESS";
}
}

return "re";
}

 

最后配置文件:

<!-- 指定允许上传的文件最大字节数。默认值是2097152(2M) -->
<constant name="struts.multipart.maxSize" value="10701096"/>
<!-- 设置上传文件的临时文件夹,默认使用javax.servlet.context.tempdir  文件上传时使用-->
<constant name="struts.multipart.saveDir " value="/tmp" />

推荐内容:Struts2文件上传原理及示例
http://blog.sina.com.cn/s/blog_87720b870100zkn2.html

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。