Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

boto3 與 django-storages:如何在 Django 中對接 AWS S3

最後更新:2024年12月18日Python

本文為 圖片上傳 AWS S3 系列教學,第 2 篇:

  1. AWS S3 是什麼?
  2. boto3 與 django-storages:如何在 Django 中對接 AWS S3 👈 所在位置
  3. AWS S3 與 IAM:圖片上傳功能的權限管理指南
  4. S3 與 Postgres 的比較與應用
  5. Amazon S3 物件所有權設定解析
  6. AWS S3「阻止所有公開訪問」設定說明
  7. Amazon S3 儲存桶版本控制完整指南
  8. 如何設定 S3 儲存桶的「預設加密」?—— 初學者指南
  9. S3 儲存桶標籤(Tags)簡單介紹:讓你的 S3 管理更輕鬆!
  10. AWS S3 物件鎖定功能入門指南
  11. AWS S3 公開存取權完整指南
  12. AWS CORS 預檢請求與設定指南
  13. AWS IAM 設定教學:生成訪問密鑰以用於 S3 配置
  14. django-storages 基本配置:讓應用程式連接 S3 存儲桶
  15. Django-storages 的完整配置教學:從隱密性到快取控制
  16. Django-storages 完整配置指南:從文件存儲到訪問路徑
  17. Django-storages 配置:環境變數設定
  18. Django-storages 與 STORAGES 配置:未來相容性的最佳實踐
  19. 如何在 Django 中移除 DEBUG URL 的靜態檔案配置

建議閱讀本文前,先閱讀完 圖片上傳功能 系列文

在開發 Django 專案時,若需要將檔案儲存至 AWS S3,你會遇到兩個重要工具:boto3 和 django-storages。

這兩者雖然功能不同,但相輔相成,協助你輕鬆完成檔案上傳與管理。


boto3:AWS 與 Python 的官方溝通工具

boto3 是 AWS 官方提供的 Python SDK,專門用來讓 Python 程式與 AWS 服務(如 S3、EC2、DynamoDB 等)進行互動。

它的工作範圍屬於 低層次,也就是說,你需要自己撰寫程式碼來處理每一個細節,例如:

  • 建立 S3 Bucket
  • 檔案上傳與下載
  • 設定檔案權限
  • 驗證 AWS 帳戶

boto3 範例:自行寫邏輯上傳檔案

import boto3
from botocore.exceptions import NoCredentialsError

# 設定 S3 參數
s3 = boto3.client('s3', aws_access_key_id='your-key', aws_secret_access_key='your-secret')

# 上傳檔案到 S3
try:
    s3.upload_file('local_file.txt', 'my_bucket', 'file_in_s3.txt')
    print("Upload Successful")
except FileNotFoundError:
    print("The file was not found")
except NoCredentialsError:
    print("Credentials not available")

這段程式碼會將 local_file.txt 上傳到指定的 S3 bucket,但需要手動撰寫各項細節,如帳號驗證與檔案位置。


django-storages:讓 Django 無縫整合 S3

django-storages 是 Django 的擴展工具,目的是將外部儲存服務(如 AWS S3)輕鬆整合進 Django 專案中。

它本身是一個 高階封裝工具,底層依賴 boto3 進行操作,但提供了更符合 Django 框架的使用方式。

django-storages 範例:快速上傳檔案

設定好 AWS 參數後,在 settings.py 加入以下設定:

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
AWS_ACCESS_KEY_ID = 'your-key'
AWS_SECRET_ACCESS_KEY = 'your-secret'
AWS_STORAGE_BUCKET_NAME = 'your-bucket-name'

接著,在程式中直接使用 Django 提供的 檔案存儲 API:

from django.core.files.storage import default_storage
from django.core.files.base import ContentFile

# 上傳檔案
default_storage.save('uploads/my_file.txt', ContentFile('文件內容'))

# 取得檔案 URL
file_url = default_storage.url('uploads/my_file.txt')
print(file_url)

只需幾行程式碼,django-storages 就會幫你將檔案上傳到 AWS S3,並自動處理權限、驗證等繁瑣細節。


boto3 與 django-storages 的關係

簡單類比

  • boto3:像是 AWS 的「工具箱」,你需要親自組裝並設定每個細節。
  • django-storages:像是一個「一鍵工具」,它幫你把複雜的底層邏輯封裝好,你只需設定參數即可輕鬆使用。

如何安裝 boto3 與 django-storages

要使用 django-storages,必須同時安裝 boto3,因為 django-storages 依賴 boto3 與 AWS 服務進行互動。

執行以下指令安裝兩者:

pip install boto3 django-storages

常見錯誤:未安裝 boto3

若只安裝 django-storages,但未安裝 boto3,你會遇到類似以下錯誤:

ModuleNotFoundError: No module named 'boto3'

這是因為 django-storages 在運行時會呼叫 boto3 進行底層操作,若找不到 boto3 模組,便會出錯。


結論

  • boto3 是 AWS 與 Python 的官方工具,提供完整且低層次的操作能力。
  • django-storages 是 Django 的擴展工具,封裝了 boto3 的功能,讓你能以更簡單的方式在 Django 中整合 S3。

即使使用 django-storages,你仍需安裝 boto3,因為兩者是 合作運作 的。

如果你追求靈活性與高自定義度,使用 boto3;如果你想要快速整合 AWS S3,選擇 django-storages。

透過這兩個工具,你可以輕鬆將檔案儲存整合到 AWS S3,提升 Django 專案的擴展性與效率。

目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

Python

目錄

  • boto3:AWS 與 Python 的官方溝通工具
  • boto3 範例:自行寫邏輯上傳檔案
  • django-storages:讓 Django 無縫整合 S3
  • django-storages 範例:快速上傳檔案
  • boto3 與 django-storages 的關係
  • 簡單類比
  • 如何安裝 boto3 與 django-storages
  • 常見錯誤:未安裝 boto3
  • 結論