[英]Django - Media upload [Errno 13] Permission denied
我在让 django 很好地处理图像上传时遇到了一些麻烦。 我的脚本将根据日期创建目录,如下所示:
file = models.FileField(upload_to='uploads/%m-%Y/')
现在,如果我在上传文件夹中创建过时的目录并将文件夹 chmod 修改为 755,上传工作正常,但是如果我尝试修改上传文件夹而不创建过时的子文件夹(我需要 django 来做),我是出现权限错误。
如何使文件夹允许创建子文件夹?
这是一个追溯:
Django Version: 1.3
Python Version: 2.5.2
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.admin',
'tagging',
'mediamanager',
'livesettings',
'projects']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware')
Traceback:
File "/var/lib/python-support/python2.5/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/var/lib/python-support/python2.5/django/utils/decorators.py" in _wrapped_view
93. response = view_func(request, *args, **kwargs)
File "/var/lib/python-support/python2.5/django/contrib/auth/decorators.py" in _wrapped_view
23. return view_func(request, *args, **kwargs)
File "/var/www/enigma-dev/enigma/mediamanager/views.py" in upload_media
24. m.upload_media(data=form.cleaned_data, params=params)
File "/var/www/enigma-dev/enigma/mediamanager/models.py" in upload_media
63. self.save()
File "/var/lib/python-support/python2.5/django/db/models/base.py" in save
460. self.save_base(using=using, force_insert=force_insert, force_update=force_update)
File "/var/lib/python-support/python2.5/django/db/models/base.py" in save_base
543. for f in meta.local_fields if not isinstance(f, AutoField)]
File "/var/lib/python-support/python2.5/django/db/models/fields/files.py" in pre_save
255. file.save(file.name, file, save=False)
File "/var/lib/python-support/python2.5/django/db/models/fields/files.py" in save
92. self.name = self.storage.save(name, content)
File "/var/lib/python-support/python2.5/django/core/files/storage.py" in save
49. name = self._save(name, content)
File "/var/lib/python-support/python2.5/django/core/files/storage.py" in _save
166. os.makedirs(directory)
File "/usr/lib/python2.5/os.py" in makedirs
171. mkdir(name, mode)
Exception Type: OSError at /media-manager/upload/
Exception Value: [Errno 13] Permission denied: '/var/www/site-dev/site/static/uploads/04-2011'
我遇到了同样的错误并通过更改来修复它:
MEDIA_ROOT = '/media/'
到:
MEDIA_ROOT = 'media/'
在settings.py
。
运行 Python 解释器的进程无权写入媒体目录。 您需要将媒体目录chgrp
或chown
与 Python 进程放在同一组中,并确保目录中至少有g+rwx
,文件中至少有g+rw
。
对我来说,我忘了在我的生产服务器上的 settings.py 文件中添加: MEDIA_ROOT = os.path.join(BASE_DIR,'media') 。
确保您已完成以下操作
你的设置.py
...
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
...
同时设置媒体目录的权限
chgrp -R www-data /path/to/media/
chmod -R g+w /path/to/media/
感谢https://stackoverflow.com/users/10949995/clement-tong的启发。 我在生产环境中遇到了同样的错误,我不得不更改 settings.py 文件以包含前面的正斜杠:
MEDIA_ROOT = os.path.join(BASE_DIR, "/media")
我遇到了同样的错误,并通过在项目的 setting.py 文件中执行以下操作来修复它:
MEDIA_ROOT = '/media/'
到
MEDIA_ROOT = 'media/'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.