Django 用 AWS S3 儲存檔案
分類
建立時間: 2022年4月14日 09:14
更新時間: 2023年9月14日 08:47
說明
Django 內建有提供檔案儲存系統,預設會存在專案中
但如果存在專案,久了專案就會變得肥大,為了解決這個問題
我使用 AWS S3 來當作儲存的位置
前置作業
- 需要有一個 AWS S3 Bucket,建立方式參考這裡
- 建立一個使用者能有權限存取此儲存體
編輯 Bucket CORS
進入 Bucket
按 Permission
到 CORS 編輯
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"PUT",
"POST",
"GET"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": []
}
]
這設定是要讓所有 AllowedOrigins 地區可以用 AllowedMethods 請求
2. 建立一個使用者能有權限存取此儲存體
請參考 AWS IAM 建立 API 專用的使用者
開啟 AmazonS3FullAccess 存取權限
如果你已經有可以存取 s3 權限的使用者可以忽略此步驟
以上前置作業完成
安裝插件
$ pip install django-storages
$ pip install boto3
到 Django 專案設定
settings.py
INSTALLED_APPS = [
...
'storages',
]
# 配置 AWS
AWS_ACCESS_KEY_ID = 'xxx' # 使用者 access key id
AWS_SECRET_ACCESS_KEY = 'xxx' # 使用者 secret access key
AWS_STORAGE_BUCKET_NAME = 'my-bucket' # s3 儲存體名稱
AWS_S3_FILE_OVERWRITE = False #同名檔案是否要覆寫
AWS_DEFAULT_ACL = None
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' #預設使用 s3 儲存檔案
設定完成後可以簡單的測試一下
打開終端,到專案底下,使用指令互動模式
$ cd path/to/your_project
$ python manage.py shell
>>> from django.core.files.storage import default_storage
>>> default_storage.exists('storage_test')
False
>>> file = default_storage.open('storage_test', 'w')
>>> file.write('storage contents')
>>> file.close()
>>> default_storage.exists('storage_test')
True
>>> file = default_storage.open('storage_test', 'r')
>>> file.read()
'storage contents'
>>> file.close()
>>> default_storage.delete('storage_test')
>>> default_storage.exists('storage_test')
False
參考
https://www.learncodewithmike.com/2020/05/django-aws-s3.html
https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html
觀看次數: 1516
djangopythonawss3
一杯咖啡的力量,勝過千言萬語的感謝。
支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!