上传文件保存到服务器的HTTP请求及处理过程

HTTP request header:

请求行:

POST /upload HTTP/1.1

  • 因为是上传的文件, 文件大小不定,所以我们一般会使用POST请求进行文件上传
  • 请求URL
  • HTTP协议

请求头:

其他的都平淡无奇,主要是看上面被标注的项

Content-Type: multipart/form-data; boundary=----WebKitFormBoundarysyCsUaLV5WrP69tB

  •  Content-Type 里指明了数据是以 mutipart/form-data 来编码
  • 生成了一个 boundary 用于分割不同的字段,为了避免与正文内容重复,boundary 很长很复杂

HTTP request body:

  • 传输的是文件,包含文件名和文件类型信息。消息主体最后以 --boundary-- 标示结束

扩展:

  • 消息主体里按照字段个数又分为多个结构类似的部分,每部分都是以 --boundary 开始,紧接着内容描述信息,然后是回车,最后是字段具体内容(文本或二进制)

 现在可以知道,上面的name和pwd是以文本存储的,最后的文件是以binary二进制字节流存储的。

 注意:上传文件的文件体中包含了文件名和文件类型信息。

 

后台

先留给大家一个疑问:后台需不需要拿到HTTP request对象进行解析?

答:不需要!

前端传给我们数据+类型信息了,我们传统的思路是不是想通过HTTP request来获取对应信息进行解析,这时候就要说一下MultipartFile这个接口了。

大家可以看到什么信息?

  • MultipartFile是一个接口并继承了InputStreamSource接口。

看到了没,MultipartFile都给我们封装好了,通过MultipartFile我们就能拿到文件的所有信息,并且还可以通过transferTo很方便的将文件输出到传入的dest file中去,这就为我们将数据保存到本地提供了极大便利!!!

                // 获取原始文件名
                String originalFilename = file.getOriginalFilename();
             
                // 保存时使用的文件名
                filename = UUID.randomUUID().toString();

                file_info = originalFilename.split("\\.");
                
                // 获得索引
                suffix = file_info[file_info.length-1];
                
                // 文件保存路径
                parent = new File(path + suffix);
                if(!parent.exists()){
                    parent.mkdirs();
                }

                File dest = new File(parent, filename + "." + suffix);
                
                // 数据传输
                file.transferTo(dest);

通过MultipartFile我们很方便的就实现了相关类型文件的保存!

 

总结:前端上传文件,发送post请求,文件以二进制字节流传输,后台拿到MultipartFile文件,通过MultipartFile封装好的方法将文件保存到本地。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值