Unity UnityWebRequest 断点续传

// request = UnityWebRequest
//curl -H 'Range: bytes=1234-5678' http://xxxxxxx/xxx.jpg >> xx.jpg (获取部分内容, "-" 后面不传参数代表到结尾)
request.SetRequestHeader("Range", "bytes=" + startDownloadFileLen + "-" /* + totalDownloadFileLen */);

totalDownloadFileLen
总共多少字节,如果不填 则代表到结尾
startDownloadFileLen
从多少字节开始,也就是你下载了多少字节

[网上有各种方法可以获取每帧更新下载文件的大小]
例如继承 DownloadHandlerScript 来重写父类 ReceiveData 方法来获取下载了多少字节和当前的一个总进度

protected override bool ReceiveData(byte[] data, int dataLength){
    downloadedFileLen += dataLength;
    progress = (float)downloadedFileLen / totalFileLen;
    // ...
}

使用协程等待下载,下载时先用一个临时文件代替,比如 xx.txt.tmp,下载完成之后在做替换操作,如果中途退出,下次在进入时获取tmp文件的大小,则就是 startDownloadFileLen = xx.txt.tmp的大小

yield return request.SendWebRequest();
while (!request.isDone){
    if (request.isNetworkError || request.isHttpError){
        _httpGetState = false;
        break;
    }
    yield return null;
}
if (_httpGetState){
    // ...
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容