gpt4 book ai didi

ruby-on-rails - 使用 Paperclip 访问保存在 S3 中的文件

转载 作者:行者123 更新时间:2023-12-02 01:54:09 29 4
gpt4 key购买 nike

我正在使用 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']
}
}

我可以保存文件,并且可以使用

在 vi​​ew.html.erb 中检索文件
  `<%= image_tag card.ai.url(:thumb) %>`

我的问题是,如何访问 Controller 中的文件?我想将它添加到一个 zip 文件中,z:

def create_zip
....
elsif ENV['RAILS_ENV'] == "production"
z.add_file(card.ai.path)
...
end

这给出了错误:“无法打开文件:没有这样的文件或目录”。还尝试了“card.ai.url.path”——当然没有用。我读过 [Paperclip + S3 大规模压缩,但不,我不想禁用任何东西。所以基本上有很多帖子说如何在 .html.erb 文件中显示图像文件,但我想在 Controller 中访问它。

-如此接近完成

到目前为止...它不会使网站崩溃并且 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 = carsets_bucket.objects[card.ai.url] --still tempPicture 是空的。还尝试了 card.ai.path 并导致错误 AWS 找不到 key 。

提前致谢。

最佳答案

我需要找出 S3 中的文件路径并在下载时使用“wb”。我查看了我的开发 public/system/cards 文件夹,看看回形针如何命名它们的文件。它是 TABLENAME/ATTACHED_FILE/000/000/CARD.ID/original。 (注意 tablename 和 attached_file 是复数,'original' 可以用 'thumb' 代替。)我还将其放入 View <%= card.ai.path %>,这给了我路径

/cards/ais/000/000/001/original/startransparentbrownsmall.jpg

我的模型是这样的:

  class Card < ActiveRecord::Base
belongs_to :cardset
...
has_attached_file :ai, styles: {
thumb: '50x50>',
square: '100x100>',
medium: '200x200>'
}
end

这是有效的代码:

        s3_file_path ="cards/ais/000/000/#{format("%03d", card.id)}/original/#{card.ai_file_name}"
temp_dir_name = "#{Rails.root}/public/temp/pictures/cards/ais/000/000/#{format("%03d", card.id)}/original"

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}/#{card.ai_file_name}")
File.delete("#{temp_dir_name}/#{card.ai_file_name}")
end

s3 = AWS::S3.new(:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'])
bucket = s3.buckets[ENV['S3_BUCKET_NAME']]

File.open("#{temp_dir_name}/#{card.ai_file_name}", "wb") do |f|
f.write(bucket.objects["#{s3_file_path}"].read)
end
z.add_file("#{temp_dir_name}/#{card.ai_file_name}")

以下是对我有帮助的网站:

http://docs.aws.amazon.com/AWSImportExport/latest/DG/ManipulatingS3KeyNames.html

1 : Is there a way to download a file from s3 using the ruby gem aws-s3? Nicolas Blanco 的回答 2

关于ruby-on-rails - 使用 Paperclip 访问保存在 S3 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21149355/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com