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

 @PostMapping("/upload")
    public R 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 upload(MultipartFile file) {

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

package com.nit.reggie.common;

import lombok.Data;

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

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

@Data
public class R implements Serializable {

    private Integer code; //编码:1成功,0和其它数字为失败

    private String msg; //错误信息

    private T data; //数据

    private Map map = new HashMap(); //动态数据

    public static  R success(T object) {
        R r = new R();
        r.data = object;
        r.code = 1;
        return r;
    }

    public static  R error(String msg) {
        R r = new R();
        r.msg = msg;
        r.code = 0;
        return r;
    }

    public R 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);
    }

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

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

你可能感兴趣的:(代码解析,java,javascript)