base64を使ってPOSTするjsonに画像をねじ込む

直で送れないかなという試行。

ねじ込まれた画像の取得・保存まで。対応形式は jpeg, png のみとしてbase64の末尾20桁をファイル名として保存。

結果

出来はした。

$ curl -X POST -H "Content-Type: application/json" -d '{"image":"<base64 image>"}' https://example.com/image
def create data = params[:image] # get base64 string meta_data = data.match(/data:(image|application)\/(.{3,});base64,(.*)/) content_type = meta_data[2] encoded_image = meta_data[3] # return 400 if un-support conntent type unless content_type == "jpeg" || content_type == "png" response_bad_request("Unsupport Content-Type") return end # decode image decoded_image = Base64.strict_decode64(encoded_image) file_name = "#{encoded_image[..20]}.#{content_type}" # store file begin open("#{Rails.root}/tmp/storage/images/#{file_name}", 'wb') do |f| f.write(decoded_image) end rescue => error response_internal_server_error(error) return end end

参考