当前位置: 移动技术网 > IT编程>开发语言>Java > 【SpringMVC】上传多个文件,并响应JSON数据到前端

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

2020年10月25日  | 移动技术网IT编程  | 我要评论
1、导入依赖<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.8.0</version></dependency><dependency> <groupId>commons-fileupload</groupId>

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网