SpringBoot 文件上传到指定文件夹

有何和不可 / 2023-05-15 / 原文

1、在application.yml文件中设置存储文件夹地址

upload:
  path: E:\upload\

2、配置映射路径

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //其中image表示访问的前缀。"file:E:/upload/"是文件真实的存储路径
        registry.addResourceHandler("/upload/**").addResourceLocations("file:E:/upload/");
    }
}

3、上传文件

上传文件类

@RestController
@RequestMapping("/user")
public class UserController {

    @Value("${upload.path}")
    private String filePath;


    //根据日期生成路径   2022/1/15/
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd/");

    /**
     * 上传文件
     */
    @PostMapping("/upload")
    public R<String> uploadFile(@RequestBody MultipartFile file) {
        if (file == null) return R.error("文件不能为空");
        //1、获取上传文件的名字
        String originalFilename = file.getOriginalFilename();
        //2、对原始文件名进行判断
        if (!originalFilename.endsWith(".jpg") && !originalFilename.endsWith(".png")) {
            return R.error("上传文件类型错误,请上传png或jpg类型的图片");
        }

        //3、使用工具类,防止重复 返回:af66cdc12867443787362575b92ca514.jpg
        String fileName = PathUtils.generateFilePath(originalFilename);
        //4、创建存储日期的文件夹
        String datePath = sdf.format(new Date());
        //5、创建目录
        File dir = new File(filePath + datePath, fileName);
        //6、如果不存在就创建该文件夹
        if (!dir.exists()) {
            dir.mkdirs();
        }
        try {
            //7、将文件转存到指定文件夹
            file.transferTo(dir);
        } catch (Exception e) {
            return R.error(e.getMessage());
        }
        return R.success(datePath + fileName);
    }
}

PathUtils类

public class PathUtils {

    public static String generateFilePath(String fileName){
        //uuid作为文件名
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        //后缀和文件后缀一致,获取文件.jpg
        int index = fileName.lastIndexOf(".");
        // test.jpg -> .jpg
        String fileType = fileName.substring(index);
        return new StringBuilder().append(uuid).append(fileType).toString();
    }
}

结果返回类R

@Data
public class R<T> implements Serializable {
    private Integer code;       //编码:1成功,0和其它数字为失败
    private String msg;         //错误信息
    private T data;             //数据
    private Map map = new HashMap();   //动态数据

    public static <T> R<T> success(T object) {
        R<T> r = new R<T>();
        r.data = object;
        r.code = 1;
        return r;
    }
    public static <T> R<T> error(String msg) {
        R r = new R();
        r.msg = msg;
        r.code = 0;
        return r;
    }
    public R<T> add(String key, Object value) {
        this.map.put(key, value);
        return this;
    }
}

时间:2023-05-15 中午