Лучший способ сохранить файл на сервере, который загружается по частям?

В основном я ищу лучший способ хранить частичные загрузки на сервере. Файлы будут загружаться по частям. Чанки могут идти параллельно и в произвольном порядке. Мне нужно будет временно сохранить их где-нибудь в некоторой форме, а затем построить полный файл из загруженных фрагментов. У меня есть некоторые идеи, как это сделать, но мне интересно, есть ли уже какая-то передовая практика, или стандарт, или какой-то RFC ...?

ОБНОВЛЕНИЕ:

Загрузка будет происходить через HTTP.


person jayarjo    schedule 27.02.2011    source источник
comment
Вопрос зависит от конкретных деталей протокола. Ваш случай похож на процесс фрагментации / повторной сборки TCP, и есть много различий в реализации. Каков основной протокол? Это надежно? дает ли протокол позицию фрагмента в конце (поскольку они могут быть произвольными, должна быть возможность получить информацию о положении)? как насчет повторяющихся кусков? Какие будут приняты дубликаты?   -  person Serkan    schedule 27.02.2011
comment
Я думаю, что Google, прежде чем вы разместите свой вопрос, помог бы каждому. Можете ли вы рассказать нам, что вы пробовали до сих пор?   -  person Baz1nga    schedule 27.02.2011


Ответы (1)


Эта проблема и раньше решалась много раз. Используйте BITS, Torrents, FTP и т. Д.

Основы:

> инициализация сеанса

> отправить имя файла, размер блока, количество блоков, хэш каждого блока

> отправить фрагмент (-ы) при получении сигнала. Каждый чанк начинается с номера индекса чанка.

‹Получить имя файла и т. Д.

‹Выделить пустой файл с правильным именем и размером

‹Выделить файл завершения (скажем, name.status) и иметь по одному int на каждый фрагмент. Они представляют собой процент заполнения этого фрагмента.

‹Сигнал для запуска чанков с требуемых индексов

‹* По мере получения каждого фрагмента сохранять в выделенный файл в правильном месте.

‹< По мере завершения каждого фрагмента подтверждайте хеш-код. Если ошибочно отметьте снова как 0%

‹Когда все фрагменты получены, удалите name.status и разблокируйте выделенный файл

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

person TFD    schedule 27.02.2011