我使用的是Rails 4,Ruby 2.0,Paperclip 3.5.2。 我production.rb具有以下訪問保存在S3中的文件使用回形針
config.paperclip_defaults = {
:storage => :s3,
:s3_credentials => {
:bucket => ENV['S3_BUCKET_NAME'],
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
}
}
我可以保存文件,我可以
`<%= image_tag card.ai.url(:thumb) %>`
我的問題是檢索在view.html.erb的文件,我怎麼能訪問該文件在控制器中?我想將它添加到一個zip文件,Z:
def create_zip
....
elsif ENV['RAILS_ENV'] == "production"
z.add_file(card.ai.path)
...
end
這給出了錯誤:「無法打開文件:沒有這樣的文件或目錄」。還嘗試過「card.ai.url.path」 - 當然沒有用。 我讀過[回形針+ S3大量壓縮,但沒有我不想禁用任何東西。所以基本上有很多帖子說明如何在.html.erb文件中顯示圖像文件,但我想在控制器中訪問它。
- 所以即將完成
迄今已獲得這樣的......它不會崩潰的網站和temp_file不會進入zip文件,但temp_file是空的。
s3One = AWS::S3.new(:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'])
cardsets_bucket = s3One.buckets[ENV['S3_BUCKET_NAME']]
ai_file_object = cardsets_bucket.objects[card.ai]
temp_dir_name = "#{Rails.root}/public/temp/pictures}"
temp_dir = File.dirname("#{temp_dir_name}")
unless File.directory?("#{temp_dir_name}")
FileUtils.mkdir_p("#{temp_dir_name}")
end
if File.exists?("#{temp_dir_name}/tempPicture.jpg")
File.delete("#{temp_dir_name}/tempPicture.jpg")
end
temp_file = File.new("#{temp_dir_name}/tempPicture.jpg", 'w')
File.open("#{temp_dir_name}/tempPicture.jpg", 'w') do |file|
ai_file_object.read do |chunk|
file.write(chunk)
end
end
z.add_file("#{temp_dir_name}/tempPicture.jpg")
也曾嘗試ai_file_object = cardsets_bucket.objects [card.ai.url] --still tempPicture是空的。還嘗試過card.ai.path,並導致錯誤AWS無法找到密鑰。
在此先感謝。
z.add_file(card.ai.url)沒有工作,也沒有打開(card.ai.url)。他們是否爲你工作?我一直在進一步閱讀,似乎我必須用適當的S3 :: Bucket向S3提供文件。 – flobacca
看看'card.ai.url'返回並粘貼到瀏覽器 – house9
http://s3.amazonaws.com/bucketname/pathtofile。當我把它放入瀏覽器時,它說拒絕訪問。我必須有一些方法告訴瀏覽器我的公鑰和私鑰。我已經在我的rails應用程序中給出了我的密鑰,但我不確定使用ruby語法來獲取文件。 – flobacca