【问题标题】:Cannot upload media files in Django production to external folder无法将 Django 制作中的媒体文件上传到外部文件夹
【发布时间】:2019-10-14 09:29:54
【问题描述】:

我的 Django 生产服务器出现问题。 当我尝试上传图片时,它们总是转到app/media/ 文件夹。 但是我希望它们被上传到/mnt/data。 在管理面板中,当我上传图片时,它总是在app/media/ 文件夹中上传。 我尝试调整 Nginx 配置文件和 settings.py,但我想我迷路了。

这是我的 Nginx 配置:

     location /static/ {
            root /home/somthing/something/;
        }
        location /media/ {
        root /mnt/data/;
        }

和 Settings.py:

STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

    # Media files

    MEDIA_URL = '/media/'

    MEDIA_ROOT = (
        os.path.join(BASE_DIR, 'media')
    )

在我的模型中,这就是我创建图像的方式:

    pictures = models.ImageField(
            upload_to='postings/',
            verbose_name=_('Posting_picture'),
            blank=True, null=True,
            validators=[validate_image],
        )

我猜按照这个配置,上传的图片应该在mnt/data/media/postings

mnt/data/ 上的媒体文件夹是chmod 777,当我对写/读文件夹失去希望时,我这样做了。

【问题讨论】:

    标签: django nginx django-media


    【解决方案1】:

    目前您正在上传到:

    MEDIA_ROOT = (
        os.path.join(BASE_DIR, 'media')
    )
    

    基本意思是:

    /path/to/project/media
    

    在你的情况下应该是:

    MEDIA_ROOT = '/mnt/data'
    

    【讨论】:

    • 谢谢,您知道文件夹的权限吗?我要远离777的权限。
    • 760 适用于 nginx。 Nginx 只需要读取权限。所以760就够了
    • 再次抱歉,但现在我遇到了另一个问题:文件已上传到 mnt/data/postings 但它们是从 mnt/data/media/postings 读取的。
    • 对不起,我没能找到你。
    【解决方案2】:

    我终于想通了,Debendera 是正确的路径,但是 Nginx 配置错误。我把它改成:

    location /media/ {
        alias /mnt/data/;
        }
    

    然后它起作用了。如果我没记错的话,最好使用别名而不是root。 这是我的参考:Nginx -- static file serving confusion with root & alias

    【讨论】:

      猜你喜欢
      • 2019-07-01
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 2020-11-29
      相关资源
      最近更新 更多