SpringBoot 文件上传(二)

上一节讲解了如何利用MultipartFile接收浏览器端上传的文件:

SpringBoot 文件上传(一)-CSDN博客

这节讲解服务器端如何将文件保存到本地目录下,下节讲解服务端如何将文件保存在阿里云上。

本节需要解决两个难点:

  1. 文件重名问题
  2. 文件大小限制问题

存储文件

首先解决如何存储文件的问题,调用MultipartFile提供的方法transferTo

  • 方法名:transferTo
  • 方法参数:File类型
    @PostMapping("/upload")
    public Result upload(String username, Integer age,MultipartFile image) throws IOException {
        log.info("文件上传:{},{},{}",username,age,image);
        //存储到本地文件中
        image.transferTo(new File("C:\\Users\\luoting\\Desktop\\codeLearn\\java\\day11-SpringBootWeb案例\\01.txt"));
        return Result.success();
    }

但是01.txt固定了文件的名称与类型,所以我们需要解决文件名称和类型的问题

文件类型

MultipartFile提供的方法能够获取客户端传递的原始文件名,通过截取字串的操作获取文件类型

//文件类型   123.1.1.jpg
String originalFilename = image.getOriginalFilename();
//我们需要最后一个点后面的部分
//1、获取最后一个点的坐标
int index=originalFilename.lastIndexOf(".");
//2、截取子串
String extraName = originalFilename.substring(index);

文件名

利用UUID生成唯一的文件名

//文件名
//利用UUID生成
String basicName= UUID.randomUUID().toString();
//生成最终的文件名
String fileName=basicName+extraName;

 最终代码

    @PostMapping("/upload")
    public Result upload(String username, Integer age,MultipartFile image) throws IOException {
        log.info("文件上传:{},{},{}",username,age,image);
        //(一)文件类型   123.1.1.jpg
        String originalFilename = image.getOriginalFilename();
        //我们需要最后一个点后面的部分
        //1、获取最后一个点的坐标
        int index=originalFilename.lastIndexOf(".");
        //2、截取子串
        String extraName = originalFilename.substring(index);
        //(二)文件名
        //利用UUID生成
        String basicName= UUID.randomUUID().toString();
        //生成最终的文件名
        String fileName=basicName+extraName;

        //(三)存储到本地文件中
        image.transferTo(new File("C:\\Users\\luoting\\Desktop\\codeLearn\\java\\day11-SpringBootWeb案例\\"+fileName));
        return Result.success();
    }

用postman测试post文件

注意:

  • post请求的数据要填写在请求体(body)中
  • 选择form-data方式
  • 文件数据记得更改为文件类型

效果:在对应位置存放了相应的文件

 文件大小

在SpringBoot中,默认单个文件的最大上传大小为1M,如果要更改,则需要在application.propertity中增加如下配置:

配置单个文件和单个请求的不同是:可以一次请求上传多个文件

注意配置项只需要记住一个关键词即可:multipart

#配置单个文件上传的最大大小
spring.servlet.multipart.max-file-size=10MB
#配置单个请求上传的最大大小
spring.servlet.multipart.max-request-size=100MB

本地存储方式的缺点

  1. 客户端无法直接访问服务端存储的文件
  2. 如果要存储大量文件,服务端的负荷很重
  3. 如果服务端发生故障,则存储的数据都会失效

于是,下节讲解如何存储到阿里云,当然也可以通过搭建集群的方式

SpringBoot 文件上传(三)-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值