1、java代码
package cn.com.onsafe.api.controller.bullet;
import cn.com.onsafe.common.resp.Result;
import cn.hutool.core.io.FileUtil;
import org.apache.commons.codec.binary.Base64;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
/**
* @Author: 双歌
* @Data: 2024/7/31
*/
@RestController
@RequestMapping("/upload")
public class UploadController {
@PostMapping("/bulletImage")
public Result<Object> bulletImage(@RequestPart("file") MultipartFile file) throws IOException {
String fileName = "";
if (!file.isEmpty()) {
//文件存放路径
//方式1、文件路径以File对象的方式创建
//File filePath = new File("L://upload");
//方式2、文件路径以字符串对象的方式创建 两种方法都可以,FileUtil工具类会调用不同的方法
String filePath = "Y:\\images\\user";
if (!FileUtil.exist(filePath)) {
//工具类源码
// public static boolean exist(String path) {
// return null != path && file(path).exists();
// }
//
// public static boolean exist(File file) {
// return null != file && file.exists();
// }
//目录不存在,需要创建
FileUtil.mkdir(filePath);
}
//获取文件名称+后缀
String originalFilename = file.getOriginalFilename();
if (originalFilename != null) {
//截取文件名的到后缀
String format = originalFilename.split("\\.")[1];
String name = UUID.randomUUID().toString().replaceAll("-", "");
fileName = name + "." + format;
}
//将文件写入磁盘,下面两种方法都可以`
//使用胡图工具,以字节数组的方式,写入文件,返回一个文件路径对象,如果写入成功,返回实际的路径 D:\ upload\向日葵.png
//File file1 = FileUtil.writeBytes(file.getBytes(), "D://upload/" + file.getOriginalFilename());
//使用胡图工具,以输入流的方式,写入文件,返回一个文件路径对象,如果写入成功,返回实际的路径 D:\ upload\向日葵.png
File file1 = FileUtil.writeFromStream(file.getInputStream(), filePath + "\\" + fileName);
System.out.println(file1); //D:\ upload\向日葵.png
}
return new Result<>("http://192.168.1.253:8888/file/images/user/" + fileName);
/**
* MultipartFile 对象属性方法
* getName方法获取的是前后端约定的传入文件的参数的名称
* getOriginalFileName方法获取的是文件的完整名称,包括文件名称+文件拓展名。
* getContentType方法获取的是文件的类型,注意是文件的类型,不是文件的拓展名。
* isEmpty方法用来判断传入的文件是否为空,如果为空则表示没有传入任何文件。
* getSize方法用来获取文件的大小,单位是字节。
* getBytes方法用来将文件转换成一种字节数组的方式进行传输,会抛出IOException异常。
* getInputStream方法用来将文件转换成输入流的形式来传输文件,会抛出IOException异常。
* transferTo方法用来将接收文件传输到给定目标路径,会抛出IOException、IllegalStateException异常。该方法在实际项目开发中使用较少。
*/
}
}
2、配置
配置上传文件大小,默认为1MB
spring:
servlet:
multipart:
max-file-size: 5MB
max-request-size: 10MB