带有 REST API 的示例 rails4 应用程序,它使用回形针上传到 Amazon S3

Sample rails4 application with REST API which uses paperclip to upload to Amazon S3

谁能与我分享一个示例应用程序,它具有用于将图像上传到 Amazon S3 的 REST API。我在谷歌上搜索了很多,但其中大部分都没有按预期工作。

不胜感激。

通过API上传图片可以在前端将图片转成base64格式发送到服务器。在,服务器中你可以将base64数据转换成图像并通过paperclip.

保存到S3
class User < ActiveRecord::Base
    before_save :decode_picture_data, :if => :picture_data_provided?
    has_attached_file :avatar,
                    :storage => :s3, :s3_protocol => 'https',
                    :bucket => # S3_Bucket,
                    :url => '/user/:id/:basename_:id.:extension',
                    :s3_credentials => {
                        :access_key_id => # Access key id,
                        :secret_access_key => # Secret access key
                    },
                    :path => '/user/:id/:basename_:id.:extension',
                    :default_url => ""

  validates_attachment_content_type :avatar, :content_type => %w(image/jpeg image/jpg image/png)

  private

  def picture_data_provided?
    !self.picture_data.blank?
  end

  def decode_picture_data
    # If cover_image_data is set, decode it and hand it over to Paperclip
    data = StringIO.new(Base64.decode64(self.picture_data))
    data.class.class_eval { attr_accessor :original_filename, :content_type }
    data.original_filename = SecureRandom.hex(16) + ".png"
    data.content_type = "image/png"
    self.avatar = data
    self.picture_data = nil
  end
end

这里,picture_dataUser table 中的一个列,其中包含 base64 通过 [=32= 从客户端接收的数据] params.

您可以在上面的代码中指定您自己的 S3 URL 和路径。

在上面的代码中,来自客户端的 picture_data 通过 Paperclip 解码并保存在 S3 中。