断点续传是由服务端给客户端一个已经上传的位置标记position,然后客户端再将文件移动到向应的position,通过输入流将文件剩余部分读出来传输给服务器。
在做这个功能之前我们必须先了解一下相关的知识点。http协议的range和content-range
Range是一个请求头 ,告知服务器返回文件的那一部分。在一个range首部中,可以一次性请求多个部分,服务器会以multipart文件的形式将其返回,如果服务器返回的是范围响应,需要使用206Partial Content状态码。假如所请求的范围不合法,那么服务器会返回416状态码,表示客户端错误。服务器允许忽略Range首部,从而返回整个文件,状态码用200.
语法:
Range: <unit>=<range-start>-
Range: <unit>=<range-start>-<range-end>
Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>
Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>, <range-start>-<range-end>
指令
unit:范围所采用的单位,通常是字节。
range-start:一个整数,表示在特定单位下,范围的起始值。
range-end:一个整数,表示在特定的单位下,范围的结束值。这个值是可选的,如果不存在,表示此范围一直延伸到文档的结束。
Content-Range是服务端的响应
语法:
Content-Range: <unit> <range-start>-<range-end>/<size>
Content-Range: <unit> <range-start>-<range-end>/*
Content-Range: <unit> */<size>
指令:
unit:数据区间操作所采用的单位,通常是字节
range-start:一个整数,表示在给定单位下,区间的起始值
range-end:一个整数,表示在给定的单位下,区间的结束值。
size:文件的大小,如果大小不知道就采用*表示。