2010-10-13 3 views
1

В моем приложении я имею дело с загрузкой действительно больших файлов изображений. Они будут храниться на удаленном сервере, поэтому из того, что я смог узнать, мне нужно написать какую-то пользовательскую систему хранения (возможно, с использованием модуля p10 python). Из-за размера я бы хотел отправить файлы непосредственно на медиа-сервер, не сохраняя их в памяти (что позволяет «плакат»). Но все загруженные файлы обрабатываются классом UploadHandler, что заставляет файлы храниться локально каким-то образом (файл, темп или в памяти). Итак, как я могу обойти это?Отправлять файлы из формы непосредственно на удаленный сервер

ответ

0

В соответствии с docs класс UploadedFile должен иметь метод chunks(), который возвращает генератор. Размер блока настраивается (по умолчанию - 2,5 МБ). Таким образом, вы можете сделать что-то подобное (скопированный из документации):

destination = open('some/file/name.txt', 'wb+') 
for chunk in f.chunks(): 
    destination.write(chunk) 
destination.close() 

Это будет читать один кусок за другим в памяти и записать его в файл. (Таким образом, в памяти имеется только один фрагмент). Вы можете изменить путь open() к тому NFS, тогда каждый вызов write() будет отправлять только текущий фрагмент в NFS. (NFS экспортирует все операции с файлами, такие как open/write/read/seek/close, как RPC). Самба работает аналогично.

В качестве альтернативы вы также можете реализовать такой механизм самостоятельно, выполнив другую службу на медиасервере, который предлагает метод добавления фрагмента в файл. (Во всяком случае, использование NFS или Samba было бы лучшим выбором, на мой взгляд).

+0

, но все же после отправки этих данных будет запущено хранилище. Или я ошибаюсь? – mizou

0

Возможно, вы найдете xsendfile(snippet) или аналогичные расширения веб-серверов. Но тогда вы должны инициировать соединение с запрашивающей машины.

+0

это не вариант, к сожалению – mizou

Смежные вопросы