【Springboot】批量图片上传 从HttpServletRequest到List<MultipartFile>

376 阅读1分钟

在这里插入图片描述

前言

本文实现批量图片上传,环境为:

JDK11

Maven 3.5

springboot 2.3.7

IntelliJ IDEA 2021.2.3 (Community Edition)

Postman-win64-8.12.4

实现

依赖配置

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>org.example</groupId>
    <artifactId>springboot-upload-image</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web-services</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

application.properties

spring.servlet.multipart.max-request-size=10MB
spring.servlet.multipart.max-file-size=10MB

功能编写

主程序类 MainApplication.java

package org.sample;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class, args);
    }
}

控制类编写 FileController.java

package org.sample.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Iterator;
import java.util.List;

@RestController
@Slf4j
public class FileController {

    private static String UPLOAD_PATH = "File/image";

    // 上传图片
    @RequestMapping(value = "/uploadImage", method = RequestMethod.POST)
    @ResponseBody
    public String uploadImage(HttpServletRequest httpServletRequest) {
        MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) httpServletRequest;
        Iterator<String> fileNames = multiRequest.getFileNames();
        List<MultipartFile> multipartFiles = multiRequest.getFiles(fileNames.next());

        for (MultipartFile image : multipartFiles) {
            try {
                String name = image.getOriginalFilename();
                System.out.println(name);

                InputStream inputStream = image.getInputStream();
                Path directory = Paths.get(UPLOAD_PATH);
                if (!Files.exists(directory)) {
                    Files.createDirectories(directory);
                }
                long copy = Files.copy(inputStream, directory.resolve(name));
            } catch (Exception e) {
                log.error(e.getMessage(), e);
                return "上传失败";
            }
        }

        return "上传成功,大小:" + " ; url访问路径为:" + UPLOAD_PATH;
    }
}

文件结构

在这里插入图片描述

运行

运行 MainApplication.java

在这里插入图片描述

打开postman,编写post请求如下:

在这里插入图片描述 请求体选择form-data,数据选择file类型,点击select files:

在这里插入图片描述 我们选择几个图片,然后send

在这里插入图片描述 上传成功,可以看到图片名字已经打印出来了

在这里插入图片描述 我们查看图片保存目录:

在这里插入图片描述 可以看到刚刚的图片,成功