Отправить файлы из формы непосредственно на удаленный сервер - PullRequest
1 голос
/ 14 октября 2010

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

Ответы [ 2 ]

0 голосов
/ 14 октября 2010

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

0 голосов
/ 14 октября 2010

Согласно документам , класс 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 экспортирует все файловые операции, такие как открытие / запись / чтение / поиск / закрытие как RPC). Самба работает аналогично.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...