Могу ли я загружать большие изображения на свой сервер через HTML-форму без использования оперативной памяти?

Я создаю сайт, который требует, чтобы пользователь загружал изображения размером около 70 МБ каждое на мой сервер. В настоящее время я использую Linode с 512 МБ ОЗУ. Из-за того, что на этом сервере находятся другие сайты, не так много дополнительной памяти, поэтому можно ли загружать эти изображения на сервер, не занимая ОЗУ, путем сброса изображения непосредственно в файловую систему, или любой файл, загруженный через POST нужно сначала загрузить в память, прежде чем его можно будет сбросить в файловую систему? Требует ли характер этой проблемы сервера с большим объемом оперативной памяти?

Есть ли способ как-то интегрировать ftp-клиент в html-форму? Я использую Django, если это имеет значение.


person davidscolgan    schedule 09.05.2012    source источник
comment
Технически это возможно, загружая части файла в несколько запросов и добавляя их в один и тот же файл. С HTML5 вы можете использовать FileAPI.   -  person kirilloid    schedule 09.05.2012


Ответы (2)


В настройках вашего проекта установите FILE_UPLOAD_MAX_MEMORY_SIZE на что-то маленькое (например, 1024 байта). Это заставит Django спулировать запрос. ФАЙЛЫ на диск раньше, а не использовать ОЗУ.

Документы здесь, если вам нужна дополнительная информация: https://docs.djangoproject.com/en/dev/ref/settings/#file-upload-max-memory-size

person Steve Jalim    schedule 09.05.2012

В соответствии с вашим требованием .... Загрузка файлов django имеет два типа загрузки.

1 - Загрузка InMemory 2. Временная загрузка

В случае InMemoryUpload файлы, которые вы загрузили, находятся в ОЗУ только через request.FILES , но можно настроить эту загрузку, чтобы скрыть ее из InMemoryUpload в TemporaryUpload, которая в конечном итоге использует папку / tmp для ее хранения ... что сохраняет для ОЗУ ...

В настройках.py: -

FILE_UPLOAD_MAX_MEMORY_SIZE = #что-то

Максимальный размер в байтах для файлов, которые будут загружены в память. Файлы размером более FILE_UPLOAD_MAX_MEMORY_SIZE будут передаваться на диск. По умолчанию 2,5 мегабайта.

FILE_UPLOAD_TEMP_DIR = #путь к sme

Каталог, в котором будут храниться загруженные файлы размером более FILE_UPLOAD_MAX_MEMORY_SIZE. По умолчанию используется стандартный временный каталог вашей системы (например, /tmp в большинстве Unix-подобных систем).

Затем вы можете записать этот файл по частям в нужный каталог, так как /tmp удаляет все файлы, когда система не работает. Перейдите по этой ссылке :

https://docs.djangoproject.com/en/dev/topics/http/file-uploads/#change-upload-handler-behavior

person Manuj Rastogi    schedule 14.06.2013
comment
Спасибо, что сказал мне. Улучшено, нужна дополнительная информация? - person Manuj Rastogi; 14.06.2013
comment
Я думаю, это нормально ;) Спасибо - person Tiago Sippert; 14.06.2013