我正在尝试使用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上通过命令设置权限,任何建议表示感谢.. !!
答案 0 :(得分:1)
这些答案可能与777-ing有关,并且比777-ing更好: Django - Media upload [Errno 13] Permission denied
来自互联网的文件由用户'www-data:www-data'拥有,并且该用户的权限受到严格限制(因为来自互联网的文件可能是错误的。)您的Django media/
文件夹必须为可访问和可写给www-data用户,因此使该用户成为该用户是合适的。
此外,无论如何我都不是系统管理员,我可能是出于无法识别的无知,但是在我的Django应用程序中使用sudo
似乎对我来说是一个很大的安全隐患。
我可以看到'config'脚本的用法,该脚本可以确保新部署正确部署,但请确保该脚本和Django代码与互联网文件完全分开。如果出于某种原因需要将脚本自动化,则可以将其添加到/etc/sudoers
中以赋予它所需的权限(但请记住使用sudoers
编辑visudo
)。