我在heroku上有一个Rails应用程序。从服务器端(使用InkFilepicker的REST API),我想转换一个文件,将其保存到我的S3存储桶并将S3网址存储到我的模型中。
具体地说:给定一个图像(https://www.filepicker.io/api/file/hFHUCB3iTxyMzseuWOgG)我想转换它(https://www.filepicker.io/api/file/hFHUCB3iTxyMzseuWOgG/convert?w=200&h=150&fit=clip)并将转换后的图像存储到我的S3桶中。
修改
这是我最后所做的:
after_save :save_thumbnail_url_to_s3
def save_thumbnail_url_to_s3
convert_options = {
fit: 'clip',
h:500,
w:500
}
file = open("#{self.url}/convert?#{convert_options.to_query}")
# Writing file into S3 bucket
amazon = AWS::S3.new(access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'])
bucket = amazon.buckets[ENV['AWS_BUCKET']]
object = bucket.objects[s3_media_path]
written_file = object.write(file, acl: :public_read) # :authenticated_read
self.update_column :thumbnail_url, written_file.public_url.to_s
end
答案 0 :(得分:1)
如果您使用的是filepicker.io API,则可以使用API转换文件然后提供,然后使用open-uri创建可以发送到S3的文件流,Tempfile
如下所示比如ruby中的File
API
[3] pry(main)> require 'open-uri'
=> true
[4] pry(main)> file = open("https://www.filepicker.io/api/file/hFHUCB3iTxyMzseuWOgG/convert?...")
=> #
[5] pry(main)> file.class
=> Tempfile
答案 1 :(得分:0)
您只需使用aws-s3
gem:https://github.com/marcel/aws-s3
但是要小心,Heroku是只读,你只能处理临时文件。