Конференция "Сети" » Как можно реализовать многосекционную закачку файла по http?
 
  • Usov © (29.01.09 14:10) [20]
    Насколько я понял, то если указать рейндж например 100-500, то компонет idHTTP запишет соответствено скачаное в файл с позиции 100 и по 500?
    Получается для того чтоб дозакачать прерванную закачку надо:
    или где то хранить информацию о количестве сегментов и начало и конец каждого сегмента для каждой закачки
    или просматривать каким то образом файл для определения количества скачанных кусков.
  • Медвежонок Пятачок © (29.01.09 14:14) [21]
    то компонет idHTTP запишет соответствено скачаное в файл с позиции 100 и по 500?

    Он ничего не знает ни про какие такие "позиции"
  • Медвежонок Пятачок © (29.01.09 14:24) [22]
    idHTTP запишет соответствено скачаное в файл с позиции 100 и по 500?

    с какого перепугу?
    он запишет скачиваемое либо по указанному адресу буфера, начиная с его начала, либо в текущую позицию потока, если в метод был передан поток.

    но никак не с позиции 100, даже если это значение было в заголовке запроса.
  • Usov © (29.01.09 14:38) [23]
    может у кого есть пример?
  • Медвежонок Пятачок © (29.01.09 14:42) [24]
    пример чего?
    трех арифметических операций сложения вычитания и деления?
  • Anatoly Podgoretsky © (29.01.09 16:11) [25]

    > Насколько я понял, то если указать рейндж например 100-500,
    >  то компонет idHTTP запишет соответствено скачаное в файл
    > с позиции 100 и по 500?

    Разве он пишет в файл?
  • Usov © (29.01.09 16:56) [26]

    > Разве он пишет в файл?

    А куда если не в файл? можно конечно в TMemoryStream но ну его нафиг держать в памяти 4 гиговый файл.
  • Медвежонок Пятачок © (29.01.09 16:58) [27]
    Он пишет в стрим, а не в файл.
  • Usov © (29.01.09 17:00) [28]
    Попытаюсь обобщить услышанное:
    Задача закачать файл 100 байт в две секции в один файл (не создаем несколько временных).
    1) получаем заголовок запроса для определения размера файла
    2) создаем файловый поток для файла
    3) создаем первый поток для idhttp где устнавливаем рендж с 0 по 50
    4) устанавливаем позицию записи в файл в начало (необязательно)
    5) делаем гет запрос
    6) создаем второй поток для idhttp где устнавливаем рендж с 51 до 100
    7) устанавливаем позицию записи с 51 байта
    8) делаем гет запрос

    пункты 4 и 7 под сомнением так как неизвестно как поведет себя запись при одновременном обращении двух потоков к одному файлу.

    жду комментов и предложений
  • Медвежонок Пятачок © (29.01.09 17:08) [29]
    так как неизвестно как поведет себя запись при одновременном обращении двух потоков к одному файлу

    кому неизвестно?
  • Usov © (29.01.09 17:16) [30]

    > кому неизвестно?

    конечно же мне:)
  • FireMan_Alexey (03.02.09 14:32) [31]
    Если компонент пишет в стрим у тебя есть размер записанного!!!
    Создай 5 Мем стримов и призакачке проверяй на заполнение скажем по 128Кб и по заполнению кидай их на винт :)
  • FireMan_Alexey (03.02.09 14:34) [32]
    А когда закачка разрывается, в стриме есть позиция откуда качать дальше называется TMemoryStream.SIZE :)
  • Usov © (04.02.09 14:20) [33]

    > А когда закачка разрывается, в стриме есть позиция откуда
    > качать дальше называется TMemoryStream.SIZE :)

    Это ясно, а как определить после аварийной перезагрузки программы сколько секций было в закачке и сколько закачано в каждой сессии? Получается надо где-то хранить отдельно информацию о количестве и начале и объеме каждой секции.
  • Anatoly Podgoretsky © (04.02.09 14:40) [34]
    > Usov  (04.02.2009 14:20:33)  [33]

    Получается так
  • Медвежонок Пятачок © (04.02.09 14:42) [35]
    Это ясно, а как определить после аварийной перезагрузки программы сколько секций было в закачке и сколько закачано в каждой сессии? Получается надо где-то хранить отдельно информацию о количестве и начале и объеме каждой секции.

    ну ты догада.
  • FireMan_Alexey (04.02.09 15:28) [36]
    А у Download Master-a еще файл *.dfmr есть :)
  • Anatoly Podgoretsky © (04.02.09 16:19) [37]
    > Медвежонок Пятачок  (04.02.2009 14:42:35)  [35]

    Так созранять надо эту информацию
  • Usov © (04.02.09 23:56) [38]

    > А у Download Master-a еще файл *.dfmr есть :)

    Насколько я знаю, DM пишет инфу о секциях в конец того файла что закачивает.
  • FireMan_Alexey (05.02.09 03:38) [39]
    Сейчас нет
    А раньше был :), я по старой памяти :)
 
Конференция "Сети" » Как можно реализовать многосекционную закачку файла по http?
Есть новые Нет новых   [134437   +30][b:0][p:0.001]