从Django admin上传到S3

时间:2014-05-26 19:40:49

标签: python django amazon-web-services amazon-s3

我已经使用storagesboto将我的django应用设置设置为使用S3。使用collectstatic,我可以将静态资产移动到S3。但是,我还需要将从Django Admin上传的图像文件存储到S3。

我使用了来自here的django-s3direct包。我能够正确设置它,上传似乎工作。但是,在加载模板时,不会提供上传的图像。

我的设置.py:

STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

AWS_ACCESS_KEY_ID = 'ACCESS_KEY'

AWS_SECRET_ACCESS_KEY = 'SECRET_KEY'

AWS_STORAGE_BUCKET_NAME = 'bucketname'

S3DIRECT_ENDPOINT = 's3.amazonaws.com'  # http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region
S3DIRECT_DIR = 's3direct'  # (optional, default is 's3direct', location within the bucket to upload files)
S3DIRECT_UNIQUE_RENAME = False # (optional, default is 'False', gives the uploaded file a unique filename)

Models.py:

class BannerAds(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255)
    phone = models.BigIntegerField(max_length=20)
    image = S3DirectField(upload_to='s3direct')

2 个答案:

答案 0 :(得分:0)

如果文件正在上传,则不应该是您的设置问题。尝试在django admin中检查您的权限,确保您已获得编辑该模型的权限。

app name | BannerAds | Can change banner ads 

答案 1 :(得分:0)

您需要做的是设置媒体文件,其中包括上传。

有几种方法可以做到这一点,我使用django-storages

除此之外,您还必须更改urls.py:

urlpatterns = [
...
] + + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

是的,您还必须为MEDIA_ROOT添加设置。

但最重要的是媒体文件,谷歌,你和你将在路上。