我想从我的服务器下载一个大(zip)文件。它大约是440MB。我正在使用android下载服务。
这是我的代码:
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文件时,下载过程多次中断(无法恢复错误,之后无法恢复下载)。但是,如果我直接在android中通过下载管理器应用程序下载相同的文件,一切都很好。我不知道为什么。我在接收器中遇到的唯一错误是1008关于恢复无法恢复。有没有人有同样的问题?
谢谢。
答案 0 :(得分:3)
您的服务器必须返回ETag
标头,DownloadManager用它来标识下载文件。如果下载过程中断,则DownloadManger请求部分下载以便在上次下载的位置恢复。此请求包含其他标头:范围为Content-Range
,If-Match
包含接收到的ETag的值。服务器必须使用请求的范围和HTTP状态代码206进行响应。检查服务器日志并将它们与ADB输出进行比较。