none
Скачать файл в несколько потоков RRS feed

  • Вопрос

  • Добрый день! Требуется скачать файл в несколько потоков если это разрешает сервер. Подскажите, пожалуйста, какой запрос к серверу нужен для проверки на такую возможность и как реализовать данный процесс скачивания.
    14 марта 2014 г. 12:25

Ответы

  • Уточните, какой язык, какую платформу используете.

    В дотнете действуем примерно так: создаём обычный WebRequest, получаем WebResponse, получаем ResponseStream. У этого потока пробуем выполнить операцию Seek. Если вылетит исключение NotSupportedException "This stream does not support seek operations", значит сервер не позволяет несколько потоков. Если исключения нет, то создаём несколько потоков, каждый из которых будет качать свою часть файла со смещением.

    Впрочем, лучше использовать свойство CanSeek для определения, разрешает ли поток эту операцию.

    15 марта 2014 г. 7:02

Все ответы

  • Уточните, какой язык, какую платформу используете.

    В дотнете действуем примерно так: создаём обычный WebRequest, получаем WebResponse, получаем ResponseStream. У этого потока пробуем выполнить операцию Seek. Если вылетит исключение NotSupportedException "This stream does not support seek operations", значит сервер не позволяет несколько потоков. Если исключения нет, то создаём несколько потоков, каждый из которых будет качать свою часть файла со смещением.

    Впрочем, лучше использовать свойство CanSeek для определения, разрешает ли поток эту операцию.

    15 марта 2014 г. 7:02
  • Есть еще Dropbox, который
    в многопоточном режиме синхронизирует
    заданые папки с файлами
    и туда и обратно.

    15 марта 2014 г. 7:25
  • Запросить размер файла http командой head.

    Поделить на части/потоки.

    Что бы скачать, нужно использовать http заголовок Content-Range, в котором указать, какая часть файла нужна, скажем с 10 байта по 15. 

    Качать в разных потоках, по завершении склеить.


    Все должно быть просто, очень просто, настолько просто, на сколько это возможно!

    8 апреля 2014 г. 14:12