1. 客户端注意事项
method="post"
enctype="multipart/form-data"
<input type="file" name="upload"/>
2. 文件上传
- Struts2 框架使用拦截器来完成文件上传,并且底层使用的也是 FileUpload 组件;
- FileUpload 拦截器默认在 dafaultStack 栈中,默认会执行的;
- 文件上传时,需要在 Action 类中定义三个属性:
-
private File upload
, 该属性名与表单中file 的 name 属性名一致; 表示要上传的文件;
-
private String uploadFileName
, 前段是 name 属性名 + FileName,表示上传文件的名称;
-
private String uploadContentType
,前段是name属性名+ContentType,表示上传文件的 MIME 类型;
- 需要为上述的三个属性提供 set 方法,拦截器就可以注入值了;
// 上传代码
// 首先,判断上传的文件存在
if(uploadFileName != null){
// 处理文件名称
String uuidname = UploadUtils.getUUIDName(uploadFileName);
// 把文件保存到 D:\\apache-tomcat-7.0.52\\webapps\\upload\\
String path = "D:\\apache-tomcat-7.0.52\\webapps\\upload\\";
// 创建 file 对象
File file = new File(path + uuidname);
// 将上传文件,使用工具复制到新建文件
FileUtils.copyFile(upload,file);
// 将上传的文件路径,保存到数据库表中
customer.setFilepat(path+uuidname);
}
public class UploadUtils {
public static String getUUIDName(String filename){
int index = filename.lastIndexOf(".");
// 获取文件后缀名
String lastname = filename.substring(index,filename.length());
// 生成的uuid, 带有"-",需要替换 xxxx-xxxx-xxxx
String uuid = UUID.randomUUID().toString().replace("-","");
return uuid + lastname;
}
}
3. 文件上传常见问题
3.1 解决方案
- 在 struts.xml 中对应的
<action>
标签下配置
<result name="input">/jsp/error.jsp</result>
3.2 配置上传文件大小
- 文件上传的总大小默认值是 2M, 如果超出了 2M,程序会报出异常;该常量可以在
default.properties
中查看
- 可以在 struts.xml 中设置常量,修改文件上传的默认在大小:
<constant name="struts.multipart.maxSize" value="5000000"/>
3.3 通过配置拦截器来设置上传文件的一些属性
// struts.xml
<action name="xxxx" class="xxxxx">
// 引入默认的拦截器
<interceptor-ref name="defaultStack">
// 设置 fileUpload 拦截器的"单个上传文件的大小"属性
<param name="fileUpload.maximumSize">2097152</param>
// 设置fileUpload 拦截器的"扩展名"属性
<param name="fileUpload.allowedExtensions">.txt</param>
</interceptor-ref>
</action>