欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【SpringMVC】上传多个文件,并响应JSON数据到前端

程序员文章站 2022-04-15 18:55:41
1、导入依赖 commons-io commons-io 2.8.0 commons-fileupload...

1、导入依赖

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.8.0</version>
</dependency>
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

2、配置上传解析器

  • 在SpringMVC中进行配置
<!--    文件上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="5400000"/>
    <property name="defaultEncoding" value="UTF-8"/>
</bean>

3、创建页面上传表单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
<h1>文件上传</h1>
    <form action="/user/modifyUser" method="post" enctype="multipart/form-data">
        file1: <input type="file" name="files"/> <br>
        file2: <input type="file" name="files"/> <br>
        file3: <input type="file" name="files"/> <br>
        <input type="submit" value="上传文件"/>
    </form>
</body>
</html>

4、创建返回封装数据的工具类

public class ResponseData extends HashMap<String, Object>{

    public ResponseData put(String name, Object message) {
        super.put(name, message);
        return this;
    }

}

5、创建获取新文件名的工具类

package com.robot.utils;

import java.io.File;
import java.util.HashMap;
import java.util.UUID;

/**
 * 上传文件工具类。
 *
 * @Author 张宝旭
 * @Date 2020/10/25
 */
public class UploadUtils {

    /**
     * 根据原来的文件名来创建新的文件名。
     * 新文件名为UUID去掉连接符,接下划线,最后接原来的文件名。
     *
     * @param oldFileName 原来的文件名
     * @return 新的文件名
     */
    public static String makeNewFileName(String oldFileName) {
        String uuid = String.valueOf(UUID.randomUUID()).replace("-", "");
        return uuid + "-" + oldFileName;
    }

}

6、创建Controller层,处理上传的文件

package com.robot.controller;

import com.robot.utils.ResponseData;
import com.robot.utils.UploadUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author 张宝旭
 * @Date 2020/10/25
 */
@RequestMapping("/user")
@RestController
public class UpLoadController {

    @RequestMapping("/modifyUser")
    public ResponseData modifyUser(MultipartFile[] files) {
        ResponseData responseData = new ResponseData();
        if (files != null && files.length > 0) {
            // 获取临时存储路径
            String path = "C:\\A-Project\\OMINI\\src\\main\\webapp\\image";
            File dir = new File(path);
            if (!dir.exists()) {
                dir.mkdir();
            }
            // 存储所有文件能上传的类型
            List<String> suffix = new ArrayList<>();
            suffix.add("jpg");
            suffix.add("png");
            suffix.add("gif");
            suffix.add("mp4");
            // 检查上传文件是否符合要求
            for (int i = 0; i < files.length; i++) {
                // 获取文件名,如果文件名为空,则跳过
                String filename = files[i].getOriginalFilename();
                if (filename == null || filename.equals("")) {
                    continue;
                }
                // 获取文件后缀,限制上传文件的类型
                String fileSuffix = filename.substring(filename.lastIndexOf(".") + 1);
                if (!suffix.contains(fileSuffix)) {
                    responseData.put("code", -1);
                    responseData.put("message", "文件格式不符");
                    return responseData;
                }
            }
            // 文件上传失败的数量
            int errorCount = 0;
            // 上传文件
            for (int i = 0 ; i < files.length ; i++) {
                // 获取新的文件名
                String newFileName = UploadUtils.makeNewFileName(files[i].getOriginalFilename());
                // 上传文件
                try {
                    files[i].transferTo(new File(dir, newFileName));
                } catch (IOException e) {
                    e.printStackTrace();
                    errorCount++;
                }
            }
            responseData.put("code", 200);
            responseData.put("message", "文件上传成功,上传失败数量:" + errorCount);
        } else {
            responseData.put("code", -1);
            responseData.put("message", "文件为空");
        }
        return responseData;
    }
}

其中第四步和第五步为创建工具类,如若不需要,可以进行删减

本文地址:https://blog.csdn.net/weixin_42193813/article/details/109279299