JavaScript-怎样实现断点上传功能?

JavaScript-怎样实现断点上传功能?

甜柠檬 发布于 2017-06-08 字数 397 浏览 1089 回复 5

现在想做一个断点上传的功能,始终是有问题,就目前自己知道的有如下这些方法:
1、html 5 的blob 方法;在客户端切割文件,在服务器上进行组装
2、flash 、silverlight 等,对客户端文件进行切割;
3、用javascript 调用 flash 完成客户端工作

不知道是否还有其他的方法。
要求:web 方式,简单易用,尽量不使用activex 或 java applet.

另外客户端跟服务器端都应该怎样做才好

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

想挽留 2017-10-05 5 楼

1.利用socket也可以实现。
HttpURLConnection.setRequestProperty("RANGE","bytes=XXXX");

2.保存文件的方式。
定位文件指针指到上次保存的位置,开始存储;

浮生未歇 2017-07-15 4 楼

Google Data Protocol 中有对断点续传的描述。

http://code.google.com/intl/zh-CN/apis/gdata/docs/resumable_upload.html

里面介绍了断点续传,给出了使用例子,但没有服务器端的实现说明。
最新的chorme浏览器和FireFox3.6以上都可以支持无插件的传点续传。

偏爱自由 2017-07-14 3 楼

其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。

打个比方,浏览器请求服务器上的一个文时,所发出的请求如下:

假设服务器域名为wwww.sjtu.edu.cn,文件名为down.zip。

GET /down.zip HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-

excel, application/msword, application/vnd.ms-powerpoint, /

Accept-Language: zh-cn

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)

Connection: Keep-Alive

服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下:

200

Content-Length=106786028

Accept-Ranges=bytes

Date=Mon, 30 Apr 2001 12:56:11 GMT

ETag=W/"02ca57e173c11:95b"

Content-Type=application/octet-stream

Server=Microsoft-IIS/5.0

Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT

所谓断点续传,也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给 Web服务器的时候要多加一条信息--从哪里开始。

下面是用自己编的一个"浏览器"来传递请求信息给Web服务器,要求从2000070字节开始。

GET /down.zip HTTP/1.0

User-Agent: NetFox

RANGE: bytes=2000070-

Accept: text/html, image/gif, image/jpeg, *; q=.2, /; q=.2

仔细看一下就会发现多了一行RANGE: bytes=2000070-

这一行的意思就是告诉服务器down.zip这个文件从2000070字节开始传,前面的字节不用传了。

服务器收到这个请求以后,返回的信息如下:

206

Content-Length=106786028

Content-Range=bytes 2000070-106786027/106786028

Date=Mon, 30 Apr 2001 12:55:20 GMT

ETag=W/"02ca57e173c11:95b"

Content-Type=application/octet-stream

Server=Microsoft-IIS/5.0

Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT

和前面服务器返回的信息比较一下,就会发现增加了一行:

Content-Range=bytes 2000070-106786027/106786028

返回的代码也改为206了,而不再是200了。

瑾兮 2017-07-01 2 楼

google code 中的一个开源项目,提供上传功能的组件。

http://code.google.com/p/swfupload/

清晨说ぺ晚安 2017-06-30 1 楼

HTTP协议支持断点下载,但是不支持断点上传。
你所要实现的功能是HTTP不具备的,要么自己开发,要么找到其他类库。

说实话,我还听说过更没见过需要断点上传的web系统。

因为HTTP协议并不是用来传送大文件的,把小文件分割传送,
除了降低通信效率之外,不会带来什么好处。

http协议是做不了的,利用ftp协议做断点续传吧。要自己写其它的类库。。