无法将Django生产中的媒体文件上传到外部文件夹

时间:2019-05-28 19:52:44

标签: django nginx django-media

我的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,当我对写入/读取文件夹失去希望的时候我就这么做了。

2 个答案:

答案 0 :(得分:3)

当前您要上传到:

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

基本上是指:

/path/to/project/media

您的情况应该是:

MEDIA_ROOT = '/mnt/data'

答案 1 :(得分:0)

我终于弄明白了,Debendera是正确的选择,但是Nginx配置是错误的。我将其更改为:

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

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