问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求JavaScript文件夹上传解决方案

发布网友 发布时间:2022-04-23 20:39

我来回答

1个回答

热心网友 时间:2022-04-15 08:26

所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用到Range和Content-Range实体头。HTTP协议本身不支持断点上传,需要自己实现。

二、Range

用于请求头中,指定第一个字节的位置和最后一个字节的位置,一般格式:

Range:用于客户端到服务端的请求,可以通过改字段指定下载文件的某一段大小及其单位,字节偏移从0开始。典型格式:
Ranges: (unit=first byte pos)-[last byte pos]
Ranges: bytes=4000- 下载从第4000字节开始到文件结束部分
Ranges: bytes=0~N 下载第0-N字节范围的内容
Ranges: bytes=M-N 下载第M-N字节范围的内容
Ranges: bytes=-N 下载最后N字节内容

1.以下几点需要注意:
(1)这个数据区间是个闭合区间,起始值是0,所以“Range: bytes=0-1”这样一个请求实际上是在请求开头的2个字节。
(2)“Range: bytes=-200”,它不是表示请求文件开始位置的201个字节,而是表示要请求文件结尾处的200个字节。
(3)如果last byte pos小于first byte pos,那么这个Range请求就是无效请求,server需要忽略这个Range请求,然后回应一个200,把整个文件发给client。
(4)如果last byte pos大于等于文件长度,那么这个Range请求被认为是不能满足的,server需要回应一个416,Requested range not satisfiable。

2.示例解释:
表示头500个字节:bytes=0-499
表示第二个500字节:bytes=500-999
表示最后500个字节:bytes=-500
表示500字节以后的范围:bytes=500-
第一个和最后一个字节:bytes=0-0,-1
同时指定几个范围:bytes=500-600,601-999

三、Content-Range

用于响应头,指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:

Content-Range: bytes (unit first byte pos) - [last byte pos]/[entity legth]

四、Header示例

请求下载整个文件:

GET /test.rar HTTP/1.1
Connection: close
Host: 116.1.219.219
Range: bytes=0-801 //一般请求下载整个文件是bytes=0- 或不用这个头

一般正常回应

HTTP/1.1 200 OK
Content-Length: 801
Content-Type: application/octet-stream
Content-Range: bytes 0-800/801 //801:文件总大小

一个最简单的断点续传实现大概如下:
1.客户端下载一个1024K的文件,已经下载了其中512K
2. 网络中断,客户端请求续传,因此需要在HTTP头中申明本次需要续传的片段:
Range:bytes=512000-
这个头通知服务端从文件的512K位置开始传输文件
3. 服务端收到断点续传请求,从文件的512K位置开始传输,并且在HTTP头中增加:
Content-Range:bytes 512000-/1024000
并且此时服务端返回的HTTP状态码应该是206,而不是200。
但是在实际场景中,会出现一种情况,即在终端发起续传请求时,URL对应的文件内容在服务端已经发生变化,此时续传的数据肯定是错误的。如何解决这个问题了?显然此时我们需要有一个标识文件唯一性的方法。在RFC2616中也有相应的定义,比如实现Last-Modified来标识文件的最后修改时间,这样即可判断出续传文件时是否已经发生过改动。同时RFC2616中还定义有一个ETag的头,可以使用ETag头来放置文件的唯一标识,比如文件的MD5值。
终端在发起续传请求时应该在HTTP头中申明If-Match 或者If-Modified-Since 字段,帮助服务端判别文件变化。
另外RFC2616中同时定义有一个If-Range头,终端如果在续传是使用If-Range。If-Range中的内容可以为最初收到的ETag头或者是Last-Modfied中的最后修改时候。服务端在收到续传请求时,通过If-Range中的内容进行校验,校验一致时返回206的续传回应,不一致时服务端则返回200回应,回应的内容为新的文件的全部数据。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果手机微信怎么换漂亮字体(苹果手机微信怎么换行输入) 有什么好用的app转换字体 手写转文字的软件 erp可以看评论地址吗 淘宝评论url是什么意思? 揭秘:码牌支付风控升级,背后真相揭秘 电脑电视直播软件哪个好用什么软件好电脑看电视直播 潼南子同街学区是哪些 三极管BU406价格和参数? 火锅料放在冰柜忘了插电一个星期给会坏了吗 火锅的设备有哪些 求C#.NET 超大文件上传解决方案:分片断点上传(一) Java文件上传解决方案 求B/S 大文件上传解决方案(500M以上) 有人知道大文件传送最快的方法嘛?求介绍下 求JAVA上传大文件的三种解决方案 急求大文件上传存储解决方案啊,内存太大怎样都发不出去... 有谁知道大文件上传存储有哪些方案么? 求局域网文件夹上传解决方案 求PHP上传大文件的三种解决方案 求PHP上传文件夹的三种解决方案 十三分之七减二等于多少? 13/7-13/1等于多少简分数? 13x-7=5.7 13分之7减13分之7等于多少 13-7-5,先算什么? 6+7等于13,13-7等于6,你发现了什么? 1001/13-7等于多少? 13减7等6.10减几等于几什么意思 13一7等于13一3一多少等于10一多少等于多少 13-7等于22-一等于六。还有什么什么往后填? 求超大文件上传方案( Web ) 去黑头小窍门?是? 如何去黑头收缩毛孔简单小方法,五个小窍门送走黑头 有什么小窍门去鼻子上的黑头? 家乡油豆腐的做法,家乡油豆腐怎么做好吃,家乡 做油豆腐的方法和技术 凉拌油豆腐的做法? 红烧油豆腐怎么做好吃呢? 的做法,油豆腐炒肉怎么做好吃,油豆腐炒肉的家常做法 酿豆腐制伙方法 怎么做凉拌油豆腐 白梨冰糖止咳的做法是什么? 梨子炖冰糖的做法 魅族18spro无线网很慢 魅族18pro和18spro手机壳通用吗 魅族18spro屏幕黑点 魅族18spro怎么链接电脑 梨子炖冰糖的做法窍门 魅族18spro和荣耀magic3Pro那个好 想买个4000元左右的手机,性价比最好的有哪些?