传文件给服务器服务器处理后返回,上传文件保存到服务器的HTTP请求及处理过程...

HTTP request header:

5e53fc667627b0ac53386ead3ec8cb34.png

请求行:

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:

4743ad89b06f9d29abd5fa8a7475cc16.png

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

扩展:

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

bde19564326171acbd53b18b159719b4.png

96bf3f29b896b700649e282a1897897f.png

3c2e21bd269bc4144da990b63f7d5355.png

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

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

后台

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

答:不需要!

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

6c6e667db49a943293fa1dcd96f2bb0e.png

6ab9209f129a8432daae843af21d481b.png

大家可以看到什么信息?

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封装好的方法将文件保存到本地。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值