前言
本文实现批量图片上传,环境为:
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
上传成功,可以看到图片名字已经打印出来了
我们查看图片保存目录:
可以看到刚刚的图片,成功