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

 @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/135388688?spm=1001.2014.3001.5501

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值