1、引入压缩图片相关工具maven
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.17</version>
</dependency>
<dependency>
<groupId>org.sejda.imageio</groupId>
<artifactId>webp-imageio</artifactId>
<version>0.1.6</version>
</dependency>
2、编写主要逻辑
package com.example.picturecompression;
import net.coobird.thumbnailator.Thumbnails;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
/**
* @Author sandul
* @Version 1.0
* @Description:
* @Date 2022/9/5 15:06
*/
@RestController
public class PicController {
@Autowired
private Environment environment;
@PostMapping("/upload")
public void picCompressionUpload(HttpServletResponse response, Integer picWidth, Integer picHeight, MultipartFile pic) {
// Integer picWidth 传入的宽
// Integer picHeight 传入的高
// MultipartFile pic 传入的文件
try (
InputStream inputStream = new ByteArrayInputStream(pic.getBytes());
ServletOutputStream outputStream = response.getOutputStream()
) {
if (picWidth == null ) {
// 如果没有传入宽,尝试从配置文件获取
String width = environment.getProperty("picture.compress.width");
picWidth = width == null ? null : Integer.valueOf(width);
}
if (picHeight == null ) {
// 如果没有传入高,尝试从配置文件获取
String height = environment.getProperty("picture.compress.height");
picHeight = height == null ? null : Integer.valueOf(height);
}
Thumbnails.of(inputStream)
//picWidth:图片宽度
//picHeight:图片高度
.size(picWidth == null ? 1080 : picWidth, picHeight == null ? 1440 : picHeight)
.toOutputStream(outputStream);
response.setCharacterEncoding("UTF-8");//响应编码
response.setContentType(pic.getContentType());//响应文件类型
response.setHeader("Content-Disposition","attachment;fileName="+pic.getOriginalFilename());//响应头
} catch (Exception e) {
e.printStackTrace();
}
}
}
3、基本配置
# 图片宽、高 压缩
picture.compress.width=1080
picture.compress.height=1920
# 服务器最大上传请求
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=100MB
spring.servlet.multipart.enabled=true