В загрузке Django отказано - PullRequest
0 голосов
/ 26 апреля 2019

я пытаюсь загрузить файл с помощью django (xlsx), это мой код:

myfile = request.FILES['document']
fs = FileSystemStorage()
filename = fs.save(myfile.name, myfile)

на модели, я установил папку "media" для загрузки, получаю эту ошибку:

Permission denied: '/var/www/html/inventariosRG/media/my_file.xlsx'

эта ошибка, я пытаюсь исправить это:

  PATH = 'media/'
  myfile = request.FILES['document']
  try:
     import subprocess
     RUTA_ABSOLUTA = os.path.join(os.path.dirname(os.path.dirname(__file__)),PATH)
     subprocess.Popen('sudo chmod -R 777 '+RUTA_ABSOLUTA, shell=True)
  except Exception as e:
     raise Exception ("Error ",e)
 fs = FileSystemStorage()
 filename = fs.save(myfile.name, myfile)

этот код показывает только ту же ошибку "разрешение отклонено ...", пожалуйста, я пытаюсь установить разрешение командой на djangoЛюбое предложение спасибо .. !!

1 Ответ

1 голос
/ 26 апреля 2019

Эти ответы, вероятно, относятся и лучше, чем 777-й: Django - загрузка медиа [Errno 13] В доступе отказано

Файл из Интернета принадлежит пользователю www-data: www-data, и у этого пользователя жестко ограничены разрешения (поскольку файлы из Интернета могут быть плохими.) Ваша папка Django media/ должна быть доступна и доступный для записи пользователю www-data, поэтому подходящим владельцем является соответствующий пользователь.

Кроме того, я ни в коем случае не являюсь системным администратором, и я могу говорить от непризнанного невежества, но включение использования sudo в ваше приложение Django кажется мне большой угрозой безопасности.

Я вижу использование сценария 'config', который обеспечивает правильное развертывание нового развертывания, но сохраняет этот сценарий и ваш код Django хорошо отделенными от файлов из Интернета. Вы можете добавить свой скрипт в /etc/sudoers, чтобы предоставить ему необходимые полномочия (но не забудьте отредактировать sudoers с помощью visudo), если была какая-то причина для его автоматизации.

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