我想从服务器下载一个大(zip)文件。大约440MB。我正在使用安卓下载服务。
这是我的代码:
DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
Request request = new Request(Uri.parse(SERVER_PATH));
request.setTitle(getString(R.string.title_download));
request.setDescription(getString(R.string.desc_download));
File mapDir = new File(Environment.getExternalStorageDirectory() + DEVICE_PATH_PART);
File mapPartFile = new File(Environment.getExternalStorageDirectory() + DEVICE_PATH_PART + MAP_PACKFILE + EXT_INPROGRESS);
request.setDestinationUri(Uri.fromFile(mapPartFile));
enqueue = dm.enqueue(request);
下载开始良好。我可以在下载管理器中看到我的文件。但是,当出现一些网络问题(连接中断)时,下载将以错误1008结束,并且部分文件将从我的目录中删除。这是我的问题:如何强制下载服务不从目标目录中删除部分文件,以恢复下载过程
次要的问题是:当我从我的应用程序下载440meg文件时,下载过程多次中断(出现无法恢复错误,之后不可能恢复下载)。但若我直接在安卓系统中通过下载管理器应用程序下载相同的文件,一切都会好起来。我不知道为什么。我收到的唯一错误是1008关于不能继续。有人有同样的问题吗?
谢谢。
您的服务器必须返回一个ETag
标头,DownloadManager使用该标头来识别正在下载的文件。如果下载过程中断,DownloadManger会请求部分下载,以便在最后下载的位置继续。此请求包含附加标头:范围的Content-Range
和具有接收到的ETag值的If-Match
。服务器必须以所请求的范围和HTTP状态代码206进行响应。检查服务器日志,并将其与ADB输出进行比较。