1. 上传单个文件的步骤
第一步:引入jar包,后者jar包是很重要的,利用它的FileUtils处理上传的文件
第二步:把form表单中的 enctype 设置为:multipart/form-data
表单中包含一个<input type=”file” >
第三步:在Action类中添加一些属性
注意:后台的File对象的名称要和前台的input的name相同,这样struts2就可以利用反射技术调用set方法给File赋值了
也就是说,Action类中的File就变成了前台上传的文件了
测试:
在原项目中新增一个页面 file.jsp
主要内容:
<body>
<s:form enctype="multipart/form-data" method="post" action="file" namespace="/yinger" >
File to upload:<br>
<input type="file" name="file" /><br>
<input type="submit" name="submit" value="提交" /><br>
</s:form>
</body>
添加一个action
<action name="file" class="com.yinger.HelloWorld"
method="file">
<result name="file">/message.jsp</result>
</action>
Action类的方法:
private File file;
private String fileFileName;
private String fileContentType;
public String file() throws Exception{
String realpath = ServletActionContext.getServletContext().getRealPath("/images");//得到上下文路径
File newFile = new File(realpath);//新建一个File,如果不存在这个目录就创建出这个目录
if(!newFile.exists()){
newFile.mkdirs();
}
FileUtils.copyFile(file, new File(newFile, fileFileName));//然后复制文件
message="文件上传成功!<br>";
message+="文件名称:"+fileFileName;
message+="<br>文件类型:"+fileContentType;
return "file";
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
测试结果:
输入:http://localhost:8080/struts2test/file.jsp
结果:
查看文件:
已经上传到了指定的文件夹了!
还有一个问题就是,注意上传的文件大小的限制,这个是可以设置的
<constant name= "struts.multipart.maxSize" value="XXXX" />
value就是设置文件的大小,注意它是所有文件大小的总和,默认是 2M
2.上传多个文件的步骤
它的步骤和单个文件上传其实差不多,只不过file变成了文件的数组而已,保存时循环一下就好了
注意,jsp中定义的type为file的input的name要相同
多文件上传方法类似,再次略过了。。。