Spring Boot:文件的上传

一:请求的设置

一般请求中请求的参数都是以K=V的形式来进行传递,但传递二进制数据(文件,图片)时就会显得力不从心,所以二进制数据已multipart格式请求传递。

multipart格式请求与一般请求的不同之处:

  • content-type请求头参数
  • 实体内容为二进制数据。

请求要求:

  1. 请求类型只能为post
  2. enctype设置为 multipart/form-data,将用户所选文件的二进制数据发送给服务器

springMVC会将multipart格式的请求映射为MultipartFile对象,并对MultipartFile对象MultipartResolver进行解析和保存。

二:MultipartFile对象

2.1 MultipartFile对象的限制

可以对Multipart格式请求设置上传条件:

  • maxFileSize:默认值为-1,表示不受限制。
  • maxRequestSize:表示允许多部分http请求的最大容量。它的默认值为-1,表示它是不受限制的。
  • location:将上传的文件保存到磁盘中的指定位置,调用Part 中的write 方法将用到它。
  • fileSizeThreshold:设定一个溢出尺寸,超过这个值之后,上传的文件将被写入磁盘。在一个由多部分组成的请求中,每一个表单域,包括非文本域,都会被转换成一个Part。

2.2 MultipartFile对象的处理

对MultipartFile对象的解析处理:

  • byte[ ] getBytes( ):获取文件数据
  • String getContentType( ):获取文件MIME类型,如application/pdf、image/pdf等
  • InputStream getInputStream( ):获取文件流
  • String getOriginalFileName( ):获取上传文件的原名称
  • long getSize( ):获取文件的字节大小,单位为byte
  • boolean isEmpty( ):是否有上传的文件
  • void transferTo(File dest):将上传的文件保存到一个目标文件中。
  • getName() :获取文件名

三:Demo

#是否开启文上传服务
spring.servlet.multipart.enabled=
#文件阀值
spring.servlet.multipart.file-size-threshold=
#文件存储位置,调用Part 中的write 方法将用到它
spring.servlet.multipart.location=
#文件大小
spring.servlet.multipart.max-file-size=
#总文件大小
spring.servlet.multipart.max-request-size=
#懒解析
spring.servlet.multipart.resolve-lazily=
    @PostMapping("file")
    public String uploadFile(MultipartFile file) throws Exception{
        //文件数据
        byte[] bytes = file.getBytes();
        System.out.println("文件数据:"+bytes);
        //文件mime类型
        String contentType = file.getContentType();
        System.out.println("文件mime类型:"+contentType);
        //文件流
        InputStream inputStream = file.getInputStream();
        System.out.println("文件流:"+inputStream);
        //文件名
        String name = file.getName();
        System.out.println("文件名:"+name);
        //上传文件原名称
        String originalFilename = file.getOriginalFilename();
        System.out.println("上传文件原名称:"+originalFilename);
        //是否为空
        boolean empty = file.isEmpty();
        System.out.println("是否为空:"+empty);
        //获取资源对象
        Resource resource = file.getResource();
        System.out.println("获取资源对象"+resource);
        //文件大小
        long size = file.getSize();
        System.out.println("文件大小"+size);
        //将上传的文件保存到一个目标文件中。
        //File file1 = new File("sads");
        //file.transferTo(file1);

        return  "图片上传成功";
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值