客户端:form表单的填写:
<span style="white-space:pre"> </span><form enctype="multipart/form-data" action="FileUpdate.action" method="post">
<span style="white-space:pre"> </span>文件:<input type="file" name="files"><br/>
<span style="white-space:pre"> </span><input type="submit" value="提交">
</form>
其中文件的enctype属性很重,许多人会遗忘。
服务器端:
public class FileUpdate {
private File files;
private String filesFileName; //files为客户端的name属性值,FileName为固定值,这里可以直接获取到文件的名称
private String filesContentType;//ContentType为固定值,可以获取上传文件的类型
public String getFilesContentType() {
return filesContentType;
}
public void setFilesContentType(String filesContentType) {
this.filesContentType = filesContentType;
}
public File getFiles() {
return files;
}
public void setFiles(File files) {
this.files = files;
}
public String getFilesFileName() {
return filesFileName;
}
public void setFilesFileName(String filesFileName) {
this.filesFileName = filesFileName;
}
public String execute() throws Exception{
//获取保存路径
String relpath = ServletActionContext.getServletContext().getRealPath("/files");
System.out.println(relpath);
//新建目标文件
File saveFile = new File(new File(relpath),filesFileName);
if(!saveFile.getParentFile().exists()) saveFile.getParentFile().mkdir();
//将获取到的文件复制到目标文件
FileUtils.copyFile(files, saveFile);
System.out.println(filesContentType);
ActionContext.getContext().getApplication().put("msg", "上传成功!");
return "success";
}
}
其中容易混淆的是files,filesFileName,filesContentType,这三个属性参数的设定。这里的files是与客户端的name属性相对应的,且必须相等。
而filesFileName和filesContentType的后缀FileName,ContentType则是固定值,用于struts2自身去获取对应文件的文件名和文件类型。
struts2设定了默认最大上传文件的大小,大致是2M左右,有需要上传大文件的需求时,更改默认值:
<constant name="struts.multipart.maxSize" value="......"/>