废话不多说直接上代码
package com.example.back.controller; import ch.qos.logback.core.util.FileUtil; import com.example.back.common.Result; import com.example.back.exception.BusinessException; import jakarta.servlet.http.HttpServletResponse; import jakarta.websocket.server.PathParam; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.http.fileupload.FileUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.UUID; @RestController @RequestMapping("/files") @Slf4j public class FileController { public static final String UPLOAD_PATH = System.getProperty("user.dir"); //拿到当前项目路径 @PostMapping("/upload") public Result upload(@PathParam("file") MultipartFile file) { //上传路径 选择跟随项目目录 String path = UPLOAD_PATH + "/file/"; //获取文件名,加上唯一表示 String file_name = UUID.randomUUID().toString() + "_" + file.getOriginalFilename(); //创建目录 File file_path = new File(path); //如果文件不存在,创建这个路径 避免不存在文件但是添加文件报错 if (!file_path.exists()){ file_path.mkdirs(); } try { file.transferTo(new File(file_path,file_name)); } catch (Exception e) { e.printStackTrace(); } return Result.success("上传成功",path+file_name); }具体作用有注解,,这里简单概述一下
1.拿到当前项目跟目录,当然你也可以不拿,这里是文件跟随项目,所以拿到文件目录拼接具体文件存放目录
2.拿到文件名,拼接一个唯一标识 因为文件中不能重复存放文件名相同的文件嘛,uuid,时间戳,文件层级等等
3.创建目录,判断目录是否存在,不存在添加文件会报错
4.file.transferTo(new File(file_path,file_name));
测试结果
postman中选择form-data,value左边有一个下拉箭头选择file 然后点击select file key为:controler中@pathparam的值