Intereting Posts
Eclipse и Android SDK проблема «aapt.exe остановился» Android: Yahoo Weather App Горизонтальный эффект прокрутки? Перемещаться от одного фрагмента к другому при нажатии кнопки Android Studio-Java.exe завершен с ненулевым значением выхода 2 Android – ViewCompat setBackgroundTintList не работает в API 21 Ткань Crashlytics: не удалось выполнить задачу NineOldAndroids, а не кликабельный вид после вращения или перемещения Приложение для Android не установлено из PlayStore на Kitkat Android: Как определить, будет ли кнопка «Назад» выйти из приложения (т. Е. Это последнее действие, оставшееся в стеке)? Adb shell dumpsys iphonesubinfo не работает с Android 5.0 Lollipop Как изменить настройки прокси-сервера в Android (особенно в Chrome) Как добавить файл в проект Android, установить его на устройство и открыть его? Дублировать файлы по одному пути внутри APK Ищет хороший календарь датпикера для Android Как запретить AndroidStudio открывать LogCat (вкладку) при нажатии «Выполнить»?

Как возобновить прерванный скачать

Я пытаюсь загрузить большой файл с моего 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(); 

Solutions Collecting From Web of "Как возобновить прерванный скачать"

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

 // 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 Запросы на поиск диапазона

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

Вот пример кода, который вы можете использовать:

 import java.io.*; import java.net.*; public class HttpUrlDownload { public static void main(String[] args) { String strUrl = "http://VRSDLSCEN001:80//DLS//lib//clics.jar"; String DESTINATION_PATH = "clics.jar"; int count = 0; while (true) { count++; if (download(strUrl, DESTINATION_PATH) == true || count > 20) { break; } } } public static boolean download(String strUrl, String DESTINATION_PATH) { BufferedInputStream in = null; FileOutputStream fos = null; BufferedOutputStream bout = null; URLConnection connection = null; int downloaded = 0; try { System.out.println("mark ... download start"); URL url = new URL(strUrl); connection = url.openConnection(); File file=new File(DESTINATION_PATH); if(file.exists()){ downloaded = (int) file.length(); } if (downloaded == 0) { connection.connect(); } else { connection.setRequestProperty("Range", "bytes=" + downloaded + "-"); connection.connect(); } try { in = new BufferedInputStream(connection.getInputStream()); } catch (IOException e) { int responseCode = 0; try { responseCode = ((HttpURLConnection)connection).getResponseCode(); } catch (IOException e1) { e1.printStackTrace(); } if (responseCode == 416) { return true; } else { e.printStackTrace(); return false; } } fos=(downloaded==0)? new FileOutputStream(DESTINATION_PATH): new FileOutputStream(DESTINATION_PATH,true); bout = new BufferedOutputStream(fos, 1024); byte[] data = new byte[1024]; int x = 0; while ((x = in.read(data, 0, 1024)) >= 0) { bout.write(data, 0, x); } in.close(); bout.flush(); bout.close(); return false; } catch (IOException e) { e.printStackTrace(); return false; } finally { if (in != null) { try { in.close(); } catch (IOException e) { } } if (fos != null) { try { fos.close(); } catch (IOException e) { } } if (bout != null) { try { bout.close(); } catch (IOException e) { } } if (connection != null) { ((HttpURLConnection)connection).disconnect(); } } } }