在Django-storages中使用S3上传图片

0 投票
1 回答
1201 浏览
提问于 2025-04-18 06:24

我正在尝试在亚马逊的S3服务上上传媒体文件。我想先把它们上传到存储桶的根目录,然后可能再创建子文件夹来保存文件。我的测试模型很简单。

from django.db import models

# Create your models here.


class TestModel(models.Model):
    name = models.CharField(max_length=10)
    logo = models.ImageField(upload_to='pictures/')

    class Meta:
        verbose_name = ('TestModel')
        verbose_name_plural = ('TestModels')

    def __unicode__(self):
        pass

我已经创建了一个名为pictures的子文件夹。

settigns.py

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = 'id'
AWS_SECRET_ACCESS_KEY = 'secret_key'
AWS_STORAGE_BUCKET_NAME = 'mybucket'

from S3 import CallingFormat
AWS_CALLING_FORMAT = CallingFormat.SUBDOMAIN

但是当我尝试从管理面板添加一个TestModel时,我遇到了以下错误。

Request URL:    http://127.0.0.1:8000/admin/testmodel/testmodel/add/
Django Version: 1.6.4
Exception Type: TypeError
Exception Value:    
'NoneType' object has no attribute '__getitem__'

s3和django-storages的工作方式和以前一样吗?使用s3时,MEDIA_URL应该设置成什么?使用S3和django-storages时,MEDIA_ROOT应该设置成什么?

我可以用这种方式将文件上传到S3服务吗?这是我第一次使用云存储,所以我有点困惑。

1 个回答

0

如果你想使用S3,可以看看“boto”这个Python模块,它是用来和AWS(亚马逊云服务)打交道的。你可以在这里找到相关信息:http://boto.readthedocs.org/en/latest/。还有关于MEDIA_ROOT和MEDIA_URL的内容,可以参考这个链接:https://docs.djangoproject.com/en/dev/ref/settings/#media-root

撰写回答