文件上传功能(一)

发布于:2025-02-10 ⋅ 阅读:(89) ⋅ 点赞:(0)

总说

过程参考黑马程序员SpringBoot3+Vue3全套视频教程,springboot+vue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili

目录

总说

一、功能实现

1.1 Controller层

二、优化


一、功能实现

1.1 Controller层

在contoller层,创建一个FileUploadController

在桌面创建一个文件夹,命名files

同时复制文件夹路径,如下图:

FileUploadController代码如下:

@RestController
public class FileUploadController {

    @PostMapping("/upload")
    public Result<String> upload(MultipartFile file) throws IOException { //MultipartFile file 用来接收上传的文件
        //把文件的内容存到本地磁盘上
        String originFilename = file.getOriginalFilename();// 获取原始文件名
        file.transferTo(new File("C:\\Users\\86176\\Desktop\\files\\" + originFilename));//将接收到的文件内容写入到本地磁盘上
        return Result.success("url访问地址....");
    }

}

测试一下:

图片随便上传一个即可

上传成功:

同时在我们的目标路径下,我们可以看到图片已经传进去了

二、优化

但是存在一个bug,同一个文件上传会覆盖,而不是2个文件

是因为我们上传的是原始文件名,所以我们要保证文件的名字要是唯一的,从而防止文件名被覆盖

我们修改FileUploadController代码如下:

@RestController
public class FileUploadController {

    @PostMapping("/upload")
    public Result<String> upload(MultipartFile file) throws IOException { //MultipartFile file 用来接收上传的文件
        //把文件的内容存到本地磁盘上
        String originFilename = file.getOriginalFilename();// 获取原始文件名
        //保证文件的名字唯一,防止文件名被覆盖
        //用UUID.randomUUID().toString() 生成一个随机的字符串 + 原始文件名后缀
        String fileName = UUID.randomUUID().toString() + originFilename.substring(originFilename.lastIndexOf("."));
        file.transferTo(new File("C:\\Users\\86176\\Desktop\\files\\" + fileName));//将接收到的文件内容写入到本地磁盘上
        return Result.success("url访问地址....");
    }

}

重新启动,进行测试

我们查看目的文件夹,如下:

这样就解决了文件覆盖问题