使用REST API / InkFilepicker转换并存储到S3

时间:2013-11-23 16:42:18

标签: ruby-on-rails filepicker.io

我在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

2 个答案:

答案 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是只读,你只能处理临时文件。