как возобновить прерванную загрузку

Я пытаюсь загрузить большой файл со своего сервера веб-сайта 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();
21
задан Josh Lee 5 August 2010 в 03:49
поделиться

1 ответ

Попробуйте использовать заголовок запроса «Диапазон»:

// 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();

Сделав это, вы можете искать в заданной точке (непосредственно перед длиной ваших загружаемых данных, скажем X ) и начните записывать туда вновь загруженные данные. Обязательно используйте то же значение X для заголовка диапазона.

Подробная информация о 14.35.2 Запросы на получение диапазона

Более подробную информацию и исходный код можно найти здесь

30
ответ дан 29 November 2019 в 21:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: