【问题标题】:Django - Media upload [Errno 13] Permission deniedDjango - 媒体上传 [Errno 13] 权限被拒绝
【发布时间】:2011-04-04 19:58:21
【问题描述】:

我在让 django 很好地处理图片上传时遇到了一些麻烦。我的脚本将根据日期创建目录,如下所示:

file = models.FileField(upload_to='uploads/%m-%Y/')

现在,如果我在上传文件夹中创建日期目录并将文件夹更改为 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'

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

    我遇到了同样的错误并通过更改来修复它:

    MEDIA_ROOT = '/media/'
    

    到:

    MEDIA_ROOT = 'media/'
    

    settings.py下。

    【讨论】:

      【解决方案2】:

      运行 Python 解释器的进程没有写入媒体目录的权限。您需要将媒体目录 chgrpchown 与 Python 进程放在同一组中,并确保至少有 g+rwx 目录和 g+rw 文件。

      【讨论】:

      • 对不起,你能告诉我我会用什么命令来找出文件夹的权限吗?我正在使用 ubuntu。
      • 你怎么知道 Python 进程在哪个组?谢谢!
      • 如果你运行的是 nginx,通常是 www-data。所以chown www-data:www-data -R mediacommand 会起作用。授予权限时,您似乎缺少 -R(recursive) 选项。
      • @chhantyal 谢谢你,你救了我一整天;)
      【解决方案3】:

      对于我来说,我忘记在我的生产服务器上的 settings.py 文件中添加:MEDIA_ROOT = os.path.join(BASE_DIR,'media')。

      【讨论】:

        【解决方案4】:

        确保您已完成以下操作

        你的设置.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/
        

        【讨论】:

          【解决方案5】:

          我遇到了同样的错误,并通过在项目的 setting.py 文件中执行以下操作来修复它:

          MEDIA_ROOT = '/media/'
          

          MEDIA_ROOT = 'media/'
          

          【讨论】:

            【解决方案6】:

            感谢https://stackoverflow.com/users/10949995/clement-tong 的启发。我在生产环境中遇到了同样的错误,我不得不更改 settings.py 文件以包含前面的正斜杠:

            MEDIA_ROOT = os.path.join(BASE_DIR, "/media")

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-08-07
              • 1970-01-01
              • 2021-01-17
              • 2018-02-05
              • 2011-10-18
              • 1970-01-01
              • 1970-01-01
              • 2019-05-17
              相关资源
              最近更新 更多