Fork me on GitHub

Struts 上传文件

1. 客户端注意事项

  • method="post"
  • enctype="multipart/form-data"
  • <input type="file" name="upload"/>

2. 文件上传

  1. Struts2 框架使用拦截器来完成文件上传,并且底层使用的也是 FileUpload 组件;
  2. FileUpload 拦截器默认在 dafaultStack 栈中,默认会执行的;
  3. 文件上传时,需要在 Action 类中定义三个属性:
    • private File upload, 该属性名与表单中file 的 name 属性名一致; 表示要上传的文件;
    • private String uploadFileName, 前段是 name 属性名 + FileName,表示上传文件的名称;
    • private String uploadContentType,前段是name属性名+ContentType,表示上传文件的 MIME 类型;
  4. 需要为上述的三个属性提供 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>

posted @ 2017-10-26 21:42  小a的软件思考  阅读(130)  评论(0编辑  收藏  举报