2016-11-07 10 views

答えて

1

APIを使用して画像をアップロードする場合は、画像をフロントエンドのbase64形式に変換してサーバーに送信できます。サーバーでは、base64データを画像に変換し、S3paperclipで保存することができます。ここで

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_dataはAPI paramsを介してクライアントから受信したbase64でデータを持っているUserテーブルの列です。

上記のコードで独自のS3 URLとパスを指定することができます。

上記のコードでは、クライアント側からのpicture_dataが復号され、S3Paperclipで保存されます。

+0

ゴクール、返信いただきありがとうございます。私は紙アプリ、宝石などの設定を取得するように、私はサンプルアプリケーションを共有していただけますか? –

+0

ちょうど私がやったことは何も特別なペーパークリップのgithubページの手順に従ってください。 https://github.com/thoughtbot/paperclip#installation –

+0

それは働いた。ありがとう:) –

関連する問題