Ruby on rails 使用RESTAPI/InkFilepicker转换并存储到S3

Ruby on rails 使用RESTAPI/InkFilepicker转换并存储到S3,ruby-on-rails,filepicker.io,Ruby On Rails,Filepicker.io,我在heroku上有一个Rails应用程序。从服务器端(使用InkFilepicker的RESTAPI),我想转换一个文件,将其保存到我的S3存储桶中,并将S3URL存储到我的模型中 具体来说:给定一个图像(),我想将其转换(),并将转换后的图像存储到我的S3存储桶中 编辑 以下是我在最后所做的: after_save :save_thumbnail_url_to_s3 def save_thumbnail_url_to_s3 convert_options = { fit: 'c

我在heroku上有一个Rails应用程序。从服务器端(使用InkFilepicker的RESTAPI),我想转换一个文件,将其保存到我的S3存储桶中,并将S3URL存储到我的模型中

具体来说:给定一个图像(),我想将其转换(),并将转换后的图像存储到我的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

您只需使用
aws-s3
gem即可:


但要小心,Heroku是只读的,您只能处理临时文件

如果您使用的是filepicker.io API,您可以使用该API转换文件,然后提供并使用如下所示的open uri创建一个可以发送到S3的文件流,
Tempfile
如下所示的行为类似于ruby中的
file
API


[3] pry(主)>需要“打开uri”
=>正确
[4] pry(主)>文件=打开(“?…”)
=> #
[5] pry(main)>file.class
=>临时文件

但首先,如何将图像从url下载到tmp目录?在heroku服务器上操作文件不是一个好主意。我会寻找另一种解决办法。你到底想做什么?给定一个图像(),我想将其转换(),并将转换后的图像存储到我的S3存储桶中。但我应该提到,我想使用InkFilepicker的REST Api实现这一点……看起来你不需要在服务器上转换图像。InkFilepicker似乎可以自己完成(比如访问特定的url)。你检查过这个宝石吗?