如何高效的上传大文件?

业务场景:在很多业务中会涉及到文件上传,对于上传的文件大小要求也相对比较广,对于小文件而言我们使用MultipartFile上传就能解决,对于大文件来说可能也就将文件拆分成多份,一份一份的上传,大部分业务是足以满足的,但如果你对文件上传的效率比较高那么你可以改造一下

改造方式:使用websocket长连接上传(或者新增这个方式,毕竟多个方式多个选择)

对于http传输来说是开启了一个比较短的tcp传输块文件,对于websocket双向通道来说是开启了一个超长的tcp连接来传输多个文件,对于http这种重量级请求来说算是比较高效的。

传输协议定义:至于如何传递,也可以自己定义一套协议,比如:

前4个字节为int32的类型,在4个字节是参数的长度,然后是参数的字节(至于参数是JSON或protobuf封装都可以),在4个字节是文件长度,文件字节流,如下图:

好处:那么我们这么做哪些地方会得到优化呢?

1. websocket双向通信属于轻量级,http重量级请求每片文件都是一个消耗。

2. 文件检查次数减少,http分片每篇都得检查,而websocket就不需要了,只需要每个文件检查一次即可,一个连接传递多个文件

3. 不需要将文件分开写,直接追加到一个文件,减少了合并的步骤(单机忽略这个好处,在分布式环境中需要解决没片文件上传到同一个服务器上,或者使用共享目录,但是会导致多服务写同一个文件出现错误或分片顺序混乱,所以需要分开写,比如0.txt,1.txt,2.txt...然后需要将这些片合并到一起才是完整的文件,但是websocket传递文件时从头到尾都只与同一个服务建立连接,所以可以直接追加到文件上一步到位,而且不需要担心顺序混乱的问题。)

如有更好的方式或改动建议,还请不吝指教,谢谢。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值