我正在使用 Rails 4、Ruby 2.0、Paperclip 3.5.2。 我的 production.rb 文件内容如下:
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']
}
}
我可以保存文件,也可以在view.html.erb中使用以下代码检索文件:
`<%= image_tag card.ai.url(:thumb) %>`
我的问题是,在控制器中如何访问文件?我想将它添加到一个zip文件中,即z:
def create_zip
....
elsif ENV['RAILS_ENV'] == "production"
z.add_file(card.ai.path)
...
end
这会报错:"无法打开文件:没有这样的文件或目录"。也尝试过 "card.ai.url.path" - 当然没用。 我读过 [Paperclip + S3 massive zipping,但我不想禁用任何东西。所以基本上有很多帖子说如何在 .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],但 tempPicture 仍为空。我也尝试了 card.ai.path,但出现错误 AWS 找不到密钥。谢谢。
card.ai.url
返回的内容,并将其粘贴到浏览器中。 - house9card.ai.expiring_url(600)
会生成一个签名链接,该链接有效期为5分钟。 - house9