私は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
でこれを持っていますid
が1
のpost
のthumb
バージョンです。
書籍、ツール、ソフトウェアライブラリ、チュートリアル、またはその他のオフサイトリソースを推奨するか、見つけることを尋ねる質問は、オピニオン回答とスパムを引き付ける傾向があるため、スタックオーバーフローのトピックではありません。代わりに、問題を説明し、それを解決するためにこれまでに何が行われているかを記述します。特定のプログラミングに関する質問をするためにこの質問に言葉を変えることができれば(たとえば、「私はPaperClipでx、y、zを実行しようとしています」)、トピックに戻ることができます。 – MarsAtomic
@MarsAtomic、私はすべての要件をカバーする宝石を見つけられなかったので、私は何も試すことができません。 –
@ Overflow012 'paperclip'と' carrierwave'の両方のドキュメントはあなたにどんなツールが利用できるかを示し、両方ともあなたが望むことをするのに十分です。ただし、どちらの場合でも、アプリケーションのバックエンドで説明したように処理を実装する必要があります。この「質問」は方向性がなく、また明確な答えが得られない。 – Todd