before_action :set_knowledge
最近在專案執行上,碰上需要上傳圖片並且圖片能夠在線上的資料庫做保存,這次藉由 Rails Guide 介紹的 Active Storage 與 Amazon S3 的設置環節來記錄一整個建置的過程!
About Active Storage
Active Storage 是 Ruby on Rails 一個內建庫,專門用於處理各種類型的文件,如圖片、視頻、聲音、文檔的上傳、管理和儲存。
再次複習 Active Storage 主要功能:
文件上傳和存儲:簡化文件上傳的過程,並提供多個存儲後端的選擇,包括本地、雲存儲服務(如 Amazon S3、Google Cloud Storage)等。
附件關聯:你可以將文件附件與任何 Active Record 模型進行關聯,ex. 用戶頭像、文章圖片等。
文件處理:Active Storage 允許定義不同版本的文件,ex. 生成縮略圖、處理不同尺寸或格式的文件等。
檢視和下載文件:可以輕鬆通過生成文件 URL,讓用戶查看或下載文件。
安全性和驗證:Active Storage 提供文件類型的驗證,確保上傳的文件符合安全要求。
簡化的 API:通過簡單的 API,可以執行文件上傳、刪除、獲取 URL 等操作。
About Amazon S3
Amazon S3(Simple Storage Service)是一種可擴展的物件儲存服務。
它被廣泛用於存儲和檢索各種數據,包括圖像、視頻、文檔、數據庫備份等。
Amazon S3 主要功能:
無限擴展性和耐用性:Amazon S3 使用分佈式架構,可以自動擴展以滿足不同規模的儲存需求。它提供高度耐用性,將數據複製到多個數據中心,以防止故障和數據丟失。
對象儲存:S3 是一個對象儲存服務,它不僅儲存數據本身,還包括元數據(例如標籤、屬性)和一個唯一的鍵(稱為對象鍵),用於訪問儲存在 S3 中的數據。
無需容量計劃:S3 不需要事先購買或配置特定的儲存容量,你可以根據實際需求進行擴展或縮減,並且只支付實際使用的儲存容量和數據傳輸。
安全性:S3 提供了多層次的安全性,包括數據加密(在傳輸和靜態儲存中)、存取控制和身份驗證,以確保只有授權的用戶可以訪問數據。
數據分類和標籤:你可以使用分類和標籤來組織和管理儲存在 S3 中的數據,以便更有效地管理和檢索數據。
高性能:Amazon S3 提供了高度可靠和低延遲的數據傳輸,可用於快速存儲和檢索大量的數據。
生態系統整合:Amazon S3 與其他 AWS 服務無縫集成,例如 Amazon EC2、Amazon Lambda、Amazon Redshift 等,可以實現更多複雜的應用場景。
成本效益:由於 Amazon S3 的按需定價模型,你只需要支付實際使用的儲存和數據傳輸費用,這有助於降低儲存成本。
接著,將透過建置 AWS S3 的 Bucket,來建立一個對外的儲存庫!
首先,註冊 AWS 會員
接著,要進入 S3 -> Create Bucket
The core features of Active Storage require the following permissions: s3:ListBucket
, s3:PutObject
, s3:GetObject
, and s3:DeleteObject
. Public access additionally requires s3:PutObjectAcl
.
開啟 credentials.yml 存取 Access Key 與 Secret Access Key
如果有使用 dotenv 套件,可以將機密的資訊放在
.env
檔案裡1
2EDITOR="code --wait" rails credentials:edit
File encrypted and saved.確認 Gemfile 有以下兩個指令:
- gem “image_processing”, “~> 1.2”
- gem “aws-sdk-s3”, require: false
接著, - bundle
如果還沒裝 vips 也可以藉由 (macOS) Homebrew 裝一下: - brew install vips
需要設置 CORS
AWS S3 Bucket 的 CORS 設定用於控制瀏覽器如何處理跨來源的 Web 請求,特別是 Ajax 請求和其他前端 Web 請求。
通過設置 CORS,我們可以指定允許哪些來源的網站訪問 Bucket 中的資源,以及允許的 HTTP 方法和標頭。
這是 Web 安全功能,確保資源只能被授權的網站訪問,同時防止跨站請求偽造(CSRF)等攻擊。
在 Rails Guide Active Storage 的教學中,有特別在 AWS S3 設置上提到 CORS 設定,
確保對 Bucket 中的內容進行安全而有序的跨來源訪問。
link_to: Cross-Origin Resource Sharing (CORS) Configurationcloudflare
30 天入門 Cloudflare
[AWS IAM] 學習重點節錄Remarks:
Amazon S3 與 PG 差異:
Amazon S3是一個雲端對象存儲服務,主要用於存儲各種非結構化數據,如文件、媒體文件和備份。它以高可靠性和可擴展性聞名,對象以唯一的鍵進行存儲,可進行高效的數據檢索和存取。相對而言,PostgreSQL是一個關聯式數據庫管理系統,專用於結構化數據的存儲和管理,支援SQL查詢和複雜的數據分析。S3適用於大量非結構化數據的存儲,而PostgreSQL適用於需要結構化數據和SQL功能的應用,如企業應用或數據庫驅動的應用程序。選擇取決於數據性質和用途需求。