2016-07-30 5 views
0

Web с помощью Django FrameworkПочему разрешение загружаемого изображения зависит от его размера? Приложение сборки

  • Сервер: CentOS Linux release 7.1.1503 (Core)
  • Nginx: nginx version: nginx/1.6.3
  • Gunicorn: gunicorn==19.3.0
  • Джанго: Django==1.8.4

При загрузке изображения, которое меньше, чем 2.7M все работает отлично.

  1. Изображение создается на сервере, где он должен быть (MEDIA_ROOT)
  2. группы пользователей и права на чтение: -rw-r--r-- 1 tb360 tb360
  3. Изображение обслуживается веб-сервером без проблем

Но когда размер изображения превышает 2.7M

  1. Изображение создано на сервере, где его sho ÜLD быть (MEDIA_ROOT)
  2. Изображения без разрешения чтения: -rw------- 1 tb360 tb360
  3. Изображения не не обслуживаются по причине веб-сервер : нет разрешения на чтение файла

После того как я просто добавить разрешения на чтении к такому изображению, он обслуживается веб-сервером без проблем.

При тестировании на локальной машине разработки аналогичная проблема отсутствует.

nginx configuration

ответ

1

Django использует 2 закачивать обработчика: MemoryFileUploadHandler и TemporaryFileUploadHandler. Сначала он будет сохранять загруженный файл в ram, прежде чем решать, что с ним делать. Второй поместит файл в папку temp и переместит его позже в нужное место.

Проблема, вероятно, возникает из-за того, что обработчик памяти принимает только файлы размером до определенного размера, и ваша система имеет разные разрешения по умолчанию для каталога temp. Эти разрешения будут сохраняться при перемещении файла из temp на ваш MEDIA_ROOT.

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

+0

Спасибо за четкое объяснение! Я увеличил значение [FILE_UPLOAD_MAX_MEMORY_SIZE] (https://docs.djangoproject.com/en/1.9/ref/settings/#std:setting-FILE_UPLOAD_MAX_MEMORY_SIZE) в моем случае. – demonno