【代码解析】代码解析之文件上传(1)

发布时间:2024年01月04日

 @PostMapping("/upload")
    public R<String> upload(MultipartFile file) {
        String originalFilename = file.getOriginalFilename();//xxxx.jpg
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        String fileName = UUID.randomUUID().toString()+suffix;
        File dir = new File(basePath);
        if (!dir.exists()){
            dir.mkdirs();
        }

        log.info("接收到图片:{}",file);
        try {
            file.transferTo(new File(basePath+fileName));
        }catch (IOException ex){
            ex.printStackTrace();
        }

        return R.success(fileName);
    }

这段代码来自瑞吉外卖文件上传方法

相关代码解析如下:

1.

@PostMapping("/upload")

这是一个spring mvc 的一个注解,表示该方法用于 HTTP POST 请求,其 URL 路径为 /upload

2.
? ? public R<String> upload(MultipartFile file) {

这行代码定义了一个名为 upload 的代码,它接受一个类型为 MultipartFile 的参数,该参数代表上传的文件,返回值是? R<String > 类型,其中R 是一个自定义响应类,用于封装响应数据。

package com.nit.reggie.common;

import lombok.Data;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * 通用返回结果,服务端响应的数据最终都会封装成此对象
 * @param <T>
 */

@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;
    }

}

3.

String originalFilename = file.getOriginalFilename();

从上传的文件对象中,获取原始文件名。

4.

?String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));

截取原始文件名的后缀部分,例如从"example.jpg"中获取".jpg"

5.

String fileName = UUID.randomUUID().toString()+suffix;

使用 UUID 生成一个新的文件名,并拼接上原始文件的后缀。这样做的目的是确保了即使有相同的文件名上传,也不会发生覆盖。

6.
? ? ? ? File dir = new File(basePath);

创建一个File 对象,代表要存储上传的文件目录。

7.?
? ? ? ? if (!dir.exists()){

如果目录不存在

8.
? ? ? ? ? ? dir.mkdirs();
? ? ? ? }

创建目录

9.???

? ?log.info("接收到图片:{}",file);

使用日志记录工具记录1条信息,表示接收到了一个文件

10.
? ? ? ? try {
? ? ? ? ? ? file.transferTo(new File(basePath+fileName));
? ? ? ? }catch (IOException ex){
? ? ? ? ? ? ex.printStackTrace();
? ? ? ? }

尝试将上传的文件转移到指定的目录,(该目录有base Path和新生成的fileName 组成)

如果出现任何 IOException 异常,则捕获该异常并打印堆栈跟踪。

11.

? ? ? ? return R.success(fileName);
? ? }

?返回一个成功的响应,其中包含新生成的文件名。

总结: 这段代码的功能是,接收一个上传的文件,为其生成一个新的并且唯一的文件名,并将其保存到指定的目录,并返回新的文件名

文章来源:https://blog.csdn.net/m0_67930426/article/details/135386842
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。