Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

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

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

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

使用 Django 和 AWS S3 實現圖片存儲:基礎指南

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

本文為 Django 圖片轉 webp 系列教學,第 4 篇:

  1. 圖片轉換為 WebP 格式並存儲到 AWS S3 的完整指南
  2. 如何決定儲存 WebP 圖片的方式:覆蓋與直接存儲解析
  3. 如何在 Django 中處理用戶圖片並自動轉換為 WebP 格式
  4. 使用 Django 和 AWS S3 實現圖片存儲:基礎指南 👈 所在位置
  5. 如何在 Django 中使用 Pillow 處理圖片並轉換為 WebP 格式
  6. 如何使用 UUID 為圖片生成唯一文件名:Django 文件處理實例
  7. 使用 Boto3 將 WebP 圖片上傳到 AWS S3:完整指南
  8. 解決 AWS S3 HeadObject 錯誤 (403 Forbidden):詳細指南
  9. 解決圖片重複上傳到 AWS S3 的問題:給新手的指南
  10. 如何避免重複存儲不同格式圖片在 AWS S3:新手指南
  11. 理解 Django 文件字段的行為:新手指南

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

在開發 Django 應用時,處理用戶上傳的圖片是一項常見需求。

AWS S3 作為一種高效、可靠的雲存儲服務,可以讓圖片存儲變得簡單且可擴展。

本篇文章將帶您了解 Django 如何將用戶上傳的圖片自動存儲到 AWS S3,並說明該過程的核心邏輯和注意事項。


如何使用 Django 保存圖片到 AWS S3?

Django 的 ImageField 是處理圖片上傳的核心工具,搭配 AWS S3 作為存儲後端,可以實現用戶圖片的高效管理。

保存圖片的基本步驟

在 Django 中,圖片存儲的流程如下:

  1. 調用模型的 save() 方法,將用戶上傳的圖片存儲起來。
  2. 如果配置了 AWS S3 作為文件存儲後端,圖片會自動上傳到 S3 存儲桶,而不會保存在本地伺服器。

示例代碼:

super().save(*args, **kwargs)

當執行上述代碼時:

  • 文件會按照 upload_to 的設置存儲到 S3。

    例如,若 upload_to="profile_photos/",圖片會存儲到: s3://你的桶名/profile_photos/<文件名>
  • 文件名默認保持用戶上傳的名稱,除非額外處理。

圖片的存儲與訪問

圖片存儲的路徑

當您上傳圖片後:

  1. AWS S3 會自動將圖片存儲到指定的路徑。

    例如,如果圖片字段設置如下: photo = models.ImageField(upload_to="profile_photos/") 上傳的文件會存儲到:
s3://你的桶名/profile_photos/<文件名>
  1. Django 的數據庫中會存儲圖片的相對路徑。例如: profile_photos/example.jpg

如何生成圖片的完整 URL?

若需要通過瀏覽器訪問圖片,完整的圖片 URL 格式為:

https://<你的 S3 存儲桶域名>/profile_photos/<文件名>

確保存儲桶或文件具有正確的訪問權限,否則圖片將無法訪問。


如何確認圖片是否成功存儲?

完成圖片上傳後,可以通過以下方法檢查圖片是否存儲成功:

查看 AWS S3 管理控制台

  • 登入 AWS S3 的管理介面。
  • 找到配置的存儲桶,進入 profile_photos/ 文件夾,查看圖片是否存在。

查看 Django 數據庫

  • 打開 Django 的數據庫管理工具(如 pgAdmin 或 Django shell)。
  • 確認圖片字段是否存儲了正確的路徑。例如:
 profile_photos/example.jpg

注意事項與最佳實踐

配置 AWS S3

在 Django 中使用 AWS S3,需要在 settings.py 文件中配置以下參數:

AWS_STORAGE_BUCKET_NAME = "your-bucket-name"
AWS_S3_REGION_NAME = "your-region"  # 例如 "us-east-1"
AWS_ACCESS_KEY_ID = "your-access-key"
AWS_SECRET_ACCESS_KEY = "your-secret-key"

確保圖片訪問權限

  • 如果需要公開訪問圖片,可在 S3 中設置 Bucket Policy 或將文件設置為公開。
  • 對於私有圖片,可使用 Presigned URL 技術,生成短期有效的訪問鏈接。

文件名的唯一性

使用用戶上傳的文件名可能會導致文件名衝突,建議生成唯一文件名。例如:

import uuid
unique_filename = f"profile_photos/{uuid.uuid4()}.jpg"

檔案大小和格式限制

  • 確保圖片大小在合理範圍內,避免超大圖片影響性能。
  • 限制支持的圖片格式(如 JPEG、PNG)。

結論

通過 Django 與 AWS S3 的整合,可以輕鬆實現圖片的存儲與管理。

上傳的圖片會根據配置自動存儲到 S3,而數據庫則記錄文件的相對路徑,便於後續操作。

只需正確配置 AWS S3 並設置權限,即可實現高效、可靠的圖片管理。

本指南適合新手快速上手,希望對您的開發有所幫助!

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

發表留言

留言將在審核後顯示。

Python

目錄

  • 如何使用 Django 保存圖片到 AWS S3?
  • 保存圖片的基本步驟
  • 圖片的存儲與訪問
  • 圖片存儲的路徑
  • 如何生成圖片的完整 URL?
  • 如何確認圖片是否成功存儲?
  • 查看 AWS S3 管理控制台
  • 查看 Django 數據庫
  • 注意事項與最佳實踐
  • 配置 AWS S3
  • 確保圖片訪問權限
  • 文件名的唯一性
  • 檔案大小和格式限制
  • 結論