[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引用的。

ファイルの保存先の基点ファイルのURLの基点非利用時MEDIA_ROOTMEDIA_URL利用時Amazon S3 バケットAmazon S3 バケットのURL

在使用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中,您还可以设置缓存、文件压缩以及同名文件上传时的行为。请查阅官方文档以了解更多详细信息。

广告
将在 10 秒后关闭
bannerAds