2016-07-18 9 views
0

私はRails 5でapiアプリケーションを開発しています。クライアント側からはAnuglarアプリがあります。画像の画像をレールで扱う5

  • 非同期アップロード:

    は私が行うには、次の要件があります。 (これは、最初にモデルに画像が添付されていないことを示しています)。

  • 作成するモデルにN個の画像を添付できます。
  • アップロードされた画像ごとに、指定されたM個のサムネイルを作成します。

私はCarrierWaveとpaperclipについて読んだことがありますが、どのようにこれらの要件をすべて満たすことができるのか分かりません。

これらの要件をすべてカバーする提案、ライブラリ、宝石などを本当に感謝します。

+1

書籍、ツール、ソフトウェアライブラリ、チュートリアル、またはその他のオフサイトリソースを推奨するか、見つけることを尋ねる質問は、オピニオン回答とスパムを引き付ける傾向があるため、スタックオーバーフローのトピックではありません。代わりに、問題を説明し、それを解決するためにこれまでに何が行われているかを記述します。特定のプログラミングに関する質問をするためにこの質問に言葉を変えることができれば(たとえば、「私はPaperClipでx、y、zを実行しようとしています」)、トピックに戻ることができます。 – MarsAtomic

+0

@MarsAtomic、私はすべての要件をカバーする宝石を見つけられなかったので、私は何も試すことができません。 –

+0

@ Overflow012 'paperclip'と' carrierwave'の両方のドキュメントはあなたにどんなツールが利用できるかを示し、両方ともあなたが望むことをするのに十分です。ただし、どちらの場合でも、アプリケーションのバックエンドで説明したように処理を実装する必要があります。この「質問」は方向性がなく、また明確な答えが得られない。 – Todd

答えて

1

私はCarrierWave宝石と同様のものを実装しました。イメージがモデルに添付されることを前提とします。Postモデルで

:あなたは写真のモデルができ

class Post < ActiveRecord::Base 
    has_many :photos, inverse_of: :post 
end 

class Photo < ActiveRecord::Base 
    belongs_to :post 
    mount_uploader :post_image, PostImageUploader 
end 

をあなたは、画像を作成しているので、次に、あなたはapp/uploaders/post_image_uploader.rb

class PostImageUploader < CarrierWave::Uploader::Base 
    # Create different versions of your uploaded files: 
    version :standard do 
     process resize_to_fit: [800, 800] 
    end 

    version :thumb do 
     process resize_to_fit: [100, 100] 
    end 
end 

にこれを追加することができますAPIを使用して、画像をBase64文字列に変換し、paramとして送信する必要があります。この例では、base64文字列はサーバーに送信する前に、パラメーター[:photo][:photo_data]に入っています。これにより

def create 
    @photo = Photo.new(photo_params) 
    @photo.post_image = decode_photo_data(params[:photo][:photo_data]) 

    if @photo.save 
    render json: @photo, status: :created, location: @photo 
    else 
    render json: @photo.errors, status: :unprocessable_entity 
    end 
end 

#decode base64 data to an jpg image: 
def decode_photo_data(photo_data) 
    data = StringIO.new(Base64.decode64(photo_data)) 

    data.class.class_eval { attr_accessor :original_filename, :content_type } 
    data.original_filename = "upload.jpg" 
    data.content_type = "image/jpg" 

     # return decoded data 
    data 
end 

    def photo_params 
    params.require(:photo).permit(:caption, :post_id) 
    end 

、あなたがこの

{"photo": {"caption": "an image", "post_id": 1, "photo_data":<your image base64 string>}} 

のような体を使用して作成写真のAPIエンドポイントにPOSTリクエストを作るとき、それはstandardとの両方を持つphotoを作成します。photos_controller.rbでこれを持っていますid1postthumbバージョンです。

関連する問題