文件上传要素:
表单提交方式必须是post
表单中有<input type="File" name="upload">
提供工具类
public class UploadUtils {
// 解决文件名重复
public static String getUUIDFileName(String fileName) {
int idx = fileName.lastIndexOf(".");
String extions = fileName.substring(idx);
return UUID.randomUUID().toString().replace("-", "") + extions;
}
public static void main(String[] args) {
System.out.println(UploadUtils.getUUIDFileName("aa.txt"));
}
表单的enctype属性必须为"multipart/form-data"
Action中提供3个属性,有set方法
private String uploadFileName;// 文件名称
private File upload;// 文件本身
private String uploadContentType;// 文件类型
if (upload != null) {
// 文件上传的路径
String path = "C:/upload";
// 一个文件目录下相同文件名的解决
String uuidFileName = UploadUtils.getUUIDFileName(uploadFileName);
// 创建目录
File file = new File(path);
// 文件上传
File dictFile = new File(path + "/" + uuidFileName);
FileUtils.copyFile(upload, dictFile);
}
customerService.save(customer);
设置上传限制
<!--上传总量大小常量 -->
<constant name="struts.multipart.maxSize" value="5242880"/>
在<action>标签中修改默认拦截器参数
<interceptor-ref name="defaultStack">
<!-- 上传单个文件最大值 -->
<param name="fileUpload.maximumSize">2097152</param>
<!-- 文件后缀名,格式-->
<param name="fileUpload.allowedExtensions">.jpg,.bmp</param>
</interceptor-ref>
假如上传信息不规范,如超过文件最大值,在最好一个拦截器workflow检查没有通过会返回一个input为空的视图
解决
在<action>标签中加上,并在相应页面上回响错误信息<s:actionerror/>
<result name="input">/jsp/customer/add.jsp</result>