[Django] 文件上传功能使用指南 [云存储篇]
关于这篇文章
本文将在上一篇「基本设置篇」的基础上介绍Django的文件上传功能(FileField、ImageField)的用法。本次将以Amazon S3为例,解释django-storages的使用方法。
请提供下列的中文本地化解释,仅需要一种选项:
参考
-
- naritoブログ:Django、静的ファイル、メディアファイルをAWS S3で管理
- How to Setup Amazon S3 in a Django Project
关于django-storages
django-storages是一个用于将云存储作为媒体文件保存目标的包。
django-storages 官方网址:github/gitdocs
以下是相应的存储服务等:
-
- Amazon S3
-
- Azure Storage
-
- DropBox
-
- Google Cloud Storage
-
- Apache Libcloud
- FTP/SFTP
亚马逊 S3 上的操作
使用django-storages,媒体文件的URL和保存位置如下所示。URL是直接从Amazon S3引用的。
在使用django-storages时,设置MEDIA_ROOT和MEDIA_URL不会影响其功能。
安全防护措施
在默认情况下,媒体文件的URL是利用Amazon S3的“预签名URL”功能生成的,并附带了有效期限。这个URL在一定时间后(※)会变为无法访问的状态,因此不必担心URL泄露的问题。
参考资料:在S3中生成Pre-Signed URL。
如果您想将URL用作永久链接,可以先将存储桶设为公共可访问,然后在设置中指定存储桶的URL(或使用Route53获取的自定义域名)的AWS_S3_CUSTOM_DOMAIN。这将使链接成为永久链接,而不是带有签名的URL。
※ 有效期限默认为1小时(3600)。可以通过AWS_QUERYSTRING_EXPIRE进行更改。
设置步骤
1.亚马逊上的设置。
请在云端完成以下设置。
-
- Amazon S3にバケットを作成する。
-
- Amazon IAMでユーザーを作成する。
-
- Amazon IAMでグループを作成し「AmazonS3FullAccess」またはカスタムポリシーを作ってグループに割り当てる。
- 作成したユーザーをグループに所属させる。
虽然是用英语说明,但是这个网站上有详细的操作步骤。
Django的连接设置将使用以下信息。
-
- ユーザーのアクセスキー
-
- ユーザーのシークレットキー
- バケット名
2. 安装django-storages插件
将”django-storages”和”boto3(Python用于Amazon的SDK)”安装到项目中。
pip install django-storages
pip install boto3
3.配置 Django 存储的设置
在设置文件中,我们将配置使用django-storages所需的设置,并设置先前保存的访问密钥等信息。
INSTALLED_APPS = (
...
'storages',
...
)
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_ACCESS_KEY_ID = 'Your Access Key ID'
AWS_SECRET_ACCESS_KEY = 'Your Secret Key'
AWS_STORAGE_BUCKET_NAME = 'bucket name'
这样就完成设置了。
当您尝试上传文件时,我认为您可以确认文件已保存在Amazon S3上。在django-storages中,您还可以设置缓存、文件压缩以及同名文件上传时的行为。请查阅官方文档以了解更多详细信息。