-Base64 を使用する
Base64とは
ネットワークを介して出荷するバイナリデータがある場合、通常、ビットとバイトを生の形式でネットワーク経由でストリーミングするだけではそれを行いません。なんで?一部のメディアはストリーミングテキスト用に作成されているためです。一部のプロトコルは、バイナリデータを制御文字(モデムなど)として解釈する場合があります。または、基になるプロトコルが特殊文字の組み合わせを入力したと見なす可能性があるため(FTPが行を変換する方法など)、バイナリデータが台無しになる可能性があります。エンディング)。
したがって、これを回避するために、人々はバイナリデータを文字にエンコードします。Base64は、これらのタイプのエンコーディングの1つです。なぜ64?通常、多くの文字セットに存在する同じ64文字に依存することができ、データが破損することなくワイヤの反対側に配置されることを合理的に確信できるためです。
--から引用ベース64エンコーディングは何に使用されますか?
したがって、これを行う1つの方法は、Base64文字列をjsonリクエスト内に配置し、アプリにデコードさせることです。
# Your request
{
'user':{
# ....
'picture':'GIF89a\xB4\x00\x1F\x00\xE7\xFD....'
}
}
これがあなたのモデルができることです
class User < ActiveRecord::Base
def convert_from_base64(image_data)
data = StringIO.new(Base64.decode64(image_data))
data.class.class_eval { attr_accessor :original_filename, :content_type }
tmp = Tempfile.new("base64")
tmp.write(data.read)
tmp.close
# only on *nix
data.content_type = IO.popen(["file", "--brief", "--mime-type",tmp.path],
in: :close, err: :close).read.chomp
data.original_filename = "picture." + data.content_type.split("/").last
data
end
end
# in your controller
def create
image_data = JSON.parse(params[:json])['user']['picture'] #or which ever field it is
params[:user][:picture] = @user.convert_from_base64(image_data)
# ....
end
しかし、POSTMANをざっと見てみると、自分でエンコードを行う必要があることがわかります。
または、データの代わり
にURLを渡すこともできます。URLがネット上で利用可能なリソースを指している場合です。
require "open-uri"
class User < ActiveRecord::Base
def picture_from_url(url)
self.picture = open(url)
end
end
# then just do
user.picture_from_url params[:user][:photo_url]
Update
Postmanを使用すると、実際には画像を添付して投稿リクエストを作成できます。それはあなたが探しているものではありませんか?