![](/img/trans.png)
[英]Rails 4, Fog, Amazon s3 - retrieving all the images as an array from a specific folder in a bucket.
[英]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
您需要使用應用程序上傳所有這些圖像,在安裝了carrierwave
和fog-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.