Unity2019大文件断点续传
最近要使用安卓实现视频的下载播放功能,由于安卓机运行内存有限,下载大文件就得采用实时下载写入,实时释放内存的方法。考虑到网络环境不稳定时下载被迫中断的情况,重新从头下载会导致不必要的资源浪费,断点续传也很有必要。UnityWebRequest的DownloadHandlerFile可以做到实时下载写入,不必占用整个文件大小的内存。在unity2019版本中,DownloadHandlerFile新增的append参数设置为true时文件写入方式为接续写入,不覆盖原文件。如果服务器文件会有变动,可以自己加入数据校验,校验通过再续传文件。
IEnumerator DownLoadMovie()
{
double fillData = 0;
Debug.Log("文件将被下载到:" + savePath);
using (www = UnityWebRequest.Get(fileUrl))
{
if (!fileTotal)//文件存在但不完整
{
//append设置为true文件写入方式为接续写入,不覆盖原文件。
www.downloadHandler = new DownloadHandlerFile(savePath, true);
//设置文件从什么位置开始下载和写入
www.SetRequestHeader("Range", "bytes=" + fileLength + "-");
}
else
{
//直接将文件下载到外存
www.downloadHandler = new DownloadHandlerFile(savePath, false);
}
www.SendWebRequest();
while (!www.isDone)
{
//下载进度
fillData = (www.downloadedBytes + (ulong)fileLength) / totalLength;
yield return null;
}
if (www.error != null)
{
Debug.LogError(www.error);
}
if (www.isDone)
{
www.Dispose();
www = null;
wwwOpen = false;
Debug.Log("文件下载完成,存储到:" + savePath);
}
}
}
```