Struts2做文件上传,底层封装了Fileupload

文件上传要素:

表单提交方式必须是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>

猜你喜欢

转载自blog.csdn.net/weixin_42295717/article/details/83380316