一般情况下处理下载的action类中需要有如下属性:
private File attachment;
private String attachmentFileName;
private String attachmentContentType;
其中attachment是任意的,但是其他两个属性中FileName及ContentTye是固定的,这是由struts2的源码决定的。
下面说重点:
File attachment这个属性是由struts2帮我们自己填充的,它是一个临时文件(也就是所attachment.getName()不等于attachmentFileName,attachmentFileName是由struts2帮我们填充的,attachmentFileName才是上传文件的真正的名字),一但文件上传完成后,这个临时文件是会被remove的,从console中输出的日志中可以找到remove此临时文件的记录。
也就是说struts2先把我们要上传的文件处理为在指定目录1(指定目录,下面另说)里的临时文件,然后在服务器端通过java IO保存在指定目录2中。
指定目录1:即是struts2中的default.properties中的指定的目录,默认情况是没有指定的,struts2的默认处理如下
# uses javax.servlet.context.tempdir by default
struts.multipart.saveDir=
我们可以在自定义的struts.properties文件中覆盖该属性,指定临时文件的位置
指定目录2:即在的action类处理上传方法中指定的目录,如下面的dataDir:
public String upload() throws Exception {
if (attachment != null) {
// attachment will be null if there's an error,
// such as if the uploaded file is too large
String dataDir = servletContext.getRealPath("/WEB-INF/data");
File savedFile = new File(dataDir, attachmentFileName);
attachment.renameTo(savedFile);
return SUCCESS;
} else {
return INPUT;
}
}