簡體   English   中英

從AWS S3存儲桶檢索圖像

[英]Retrieving images from AWS S3 bucket

我正在構建一個相當基本的Ruby on Rails應用程序,我將使用大約2000張圖像,這是我第一次真正接觸aws / s3。 該應用程序不會與用戶進行任何交互,因此我不確定將所有圖像都存儲在該應用程序中,然后將其上傳到我的存儲桶中,或者手動將它們添加到我的存儲桶中,然后再將它們下載到從那里的應用程序。 AWS文檔到處都是。

我目前已經安裝了carrierwave,不確定下一步應該怎么做,或者不確定如何將圖像從S3檢索到導軌中。 我也將使用Heroku,但是我已經使用我的AWS憑證設置了配置。

uploaders / photo_uploader.rb

class PhotoUploader < CarrierWave::Uploader::Base

storage :fog

def store_dir
  "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end

def content_type_whitelist
  /image\//
end
end

初始值設定項/carrierwave.rb

CarrierWave.configure do |config|
 config.fog_provider = 'fog/aws'
 config.fog_credentials = {
  provider: "AWS",
  aws_access_key_id: ENV["AWS_ACCESS_KEY_ID"],
  aws_secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"]
 }
 config.fog_directory  = ENV["S3_BUCKET"]
end

您需要使用應用程序上傳所有這些圖像,在安裝了carrierwavefog-aws之后,您需要創建model controller和用於上傳圖像的form

好的,目前您對上傳后如何顯示圖片感到困惑,對嗎?

簡單的是,如果圖像上傳正確,那么可以想象表是images ,模型是Image ,列是picture因為您沒有提供這些名稱。

images_controller

class ImagesController < ApplicationController
  def index
    @images = Image.all
  end
end

view / images / index.html.erb

<% @images.each do |image| %>
   <%= image_tag image.picture.url %>
<% end %>

注意

這不是推廣產品

如果您需要查看帶有源代碼的示例,那么這是BitBucket存儲庫 ,這是實時的Heroku應用Stripe測試卡號,必須提供CVC代碼,鍵入232等。

第一步是集成圖像上傳,您可以利用許多庫來實現這一目標。

您想要獲取dotenv-rails gem,以便可以安全地管理AWS S3所需的憑證。 這是用於生產就緒的RoR應用程序的專用資源。

您需要的下一個寶石是可管理所有內容的載carrierwave-aws和載carrierwave寶石,因此到目前為止是三顆寶石。 第四個也是最后一個寶石是mini_magick ,這是使用mini_magick提供的方法所carrierwave

第二步是注冊一個AWS賬戶以使用S3存儲桶。 您無法在應用程序上擁有圖像,因為如果這樣做,您將無法使用圖像將其部署到Heroku。 Heroku將擺脫它們。

一旦安裝了這些gem,就可以運行bundle install ,然后構建基本功能。

這是關於carrierwave一些文檔: https : carrierwave

上面鏈接中的文檔將carrierwave您逐步了解如何正確安裝carrierwave

因此,您將執行以下操作:

rails generate uploader Photo

在您的photo_uploader.rb文件中,您要取消注釋以下代碼:

def extension_whitelist
   %w(jpg jpeg gif png)
end

您希望這個未注釋的內容用作您可以上載的文件類型的驗證器。 因此,如果不是jpg jpeg gif png RoR,則會引發錯誤。 此白名單非常方便,因此我強烈建議您使用。

接下來,您必須在上傳器和數據庫之間設置映射。

因此,快速轉發到您需要將AWS連接到應用程序的部分。 這就是您的dotenv-rails寶石所在的dotenv-rails 。順便說一下,所有這些寶石都可以在rubygems.org中找到。

在文件夾的根目錄中,將創建一個名為.env的文件。

.env文件中,您將添加以下內容:

S3_BUCKET_NAME=
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=

切勿將AWS密鑰推入任何代碼庫版本控制工具(如Github)。

您想進入.gitignore文件並確保包含.env文件。 這樣git將不會跟蹤該文件。

要獲取您的AWS憑證,請在AWS控制台中轉到您的名稱,然后單擊它,您將看到一個下拉列表,其中包含

我的安全憑證

作為一種選擇。

接下來,創建您的存儲桶。

要測試與RoR應用程序的成功集成,請轉到rails console並運行以下命令:

ENV.fetch('S3_BUCKET_NAME')

如果在此階段出現錯誤,則可能需要轉到config/application.rb並添加:

require "dotenv-rails"

完成此操作后,回到rails c並再次運行ENV.fetch('S3_BUCKET_NAME') ,如果您正確地遵循了這些步驟,就應該走了。

您應該有一個initializers文件夾,然后在其中創建carrierwave.rb文件。

在該文件的內部,您將粘貼本文檔“ 用法”部分下的所有代碼:

https://github.com/sorentwo/carrierwave-aws

返回您的photo_uploader.rb文件,並將storage :file更改為storage :aws

在此處進行首頁拉伸,返回至carrierwave.rb文件,您需要從上面的鏈接中復制並粘貼的代碼中完全刪除一行代碼,此處為以下一行:

config.asset_host = "http://example.com/

現在,您可以啟動rails server ,而不是指向本地文件系統,它現在應該指向您的存儲桶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM