当前位置: 首页 > 面试题库 >

如何恢复中断的下载

侯博易
2023-03-14
问题内容

我正在尝试从Yahoo!下载大文件!如果没有在100秒之内完成下载,显然是由(不是我)设置的网站服务器断开下载。该文件足够小,通常可以成功传输。在数据速率很慢并且下载被断开的情况下,是否有办法在断开连接发生的文件偏移处恢复URLConnection?这是代码:

// Setup connection.
URL url = new URL(strUrl[0]);
URLConnection cx = url.openConnection();
cx.connect();

// Setup streams and buffers.
int lengthFile = cx.getContentLength();
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(strUrl[1]);
byte data[] = new byte[1024];

// Download file.
for (total=0; (count=input.read(data, 0, 1024)) != -1; total+=count) {
    publishProgress((int)(total*100/lengthFile));
    output.write(data, 0, count);
    Log.d("AsyncDownloadFile", "bytes: " + total);
}

// Close streams.
output.flush();
output.close();
input.close();

问题答案:

尝试使用“范围”请求标头:

// Open connection to URL.
HttpURLConnection connection = (HttpURLConnection) url.openConnection();

// Specify what portion of file to download.
connection.setRequestProperty("Range", "bytes=" + downloaded + "-");
// here "downloaded" is the data length already previously downloaded.

// Connect to server.
connection.connect();

完成此操作后,您可以seek在给定的位置(例如,在下载数据的长度之前X)开始在此处写入新下载的数据。确保X范围标头使用相同的值。

关于14.35.2范围检索请求的详细信息

更多详细信息和源代码可以在这里找到



 类似资料:
  • 问题内容: 我正在使用python 2.7请求模块使用以下代码下载二进制文件,如何使此代码从部分下载的文件中“自动恢复”下载。 如果可能的话,我宁愿只使用模块来实现这一目标。 问题答案: 如果Web服务器支持范围请求,则可以将Range标头添加到您的请求中: 您将收到StartPos和StopPos之间的部分。如果不知道StopPos,请使用: 因此您的代码将是:

  • 我正在使用Python3.5请求模块下载一个文件,使用下面的代码,如何使这段代码“自动恢复”从部分下载的文件下载。 如果可能的话,我宁愿只使用模块来实现这一点。

  • 问题内容: 我编写了一个程序,可以从某些服务器下载一些文件。 当前程序正常运行。 但我想为其添加简历支持。 我正在这样做,但结果文件已损坏: 我正在我知道支持简历的服务器上对其进行测试。 我下载了一些字节。(72720) 然后尝试恢复它。 然后,我使用Hex编辑器打开文件,在偏移量72720处,重复第一个字节: 字节0-36:FLV .............«..... onMetaData 字

  • 问题内容: 我正在从http服务器下载文件,并且必须考虑到下载过程中的随机时间,网络连接失败或计算机崩溃。如果发生这种情况,我将使用HTTP“ Range:”标头开始恢复下载。 由于必须根据MD5哈希对下载进行验证,因此我似乎没有办法在简历后使用网络输入流来获取正确的哈希,因为java.security.MessageDigest似乎没有基本上说“从我以前下载的部分md5哈希开始更新当前的md5哈

  • 问题内容: 我有一个处理我的应用程序登录的简单片段。由于我正在处理登录请求,因此我不想缓存它们。在我在请求中间引入暂停或方向更改之前,该策略可以正常工作。当用户单击登录按钮时,我将显示一个ProgressDialog。当我得到响应(成功或失败)时,这消失了。如果我进入主屏幕,然后在登录请求过程中返回到应用程序,则我的侦听器将永远不会收到通知,因此我的ProgressDialog不会被关闭并且我的应

  • 问题内容: 在这段代码中,我尝试恢复下载。目标文件为20MB。但是,当我停止在10mb上下载时,然后遇到麻烦,我得到的文件大小为30MB。似乎它继续写入文件,但不能部分从服务器下载。Wget -c非常适合该文件。如何恢复文件下载? 问题答案: 这不是我的代码,但是可以。