2017-06-22 34 views
0

私のアプリケーションにBase64エンコードされた画像が届いています。そのイメージを別の場所に再投稿したいのですが、コンテンツタイプを宛先のマルチパート/フォームデータに設定しています。この画像をアップロードするには?Railsから投稿画像

file_name = permitted_params[:file_name] 
file_contents = permitted_params[:file_contents] 

file = Tempfile.new(file_name) 
file.binmode 
file.write(Base64.decode64(file_contents)) 
file.rewind() 

raw_response = RestClient.put(
    url, 
    { 'upload' => file, :content_type => 'image/jpeg' }, 
    :headers => {:content_type => 'image/jpeg'} 
) 

(解決しよう)UPDATE

私は別のサーバー(PUTで、したがって 'URL')にそれを通過するのに必要なので、私はRestClientを使用する必要がありました。

私の問題は、私はこのコードで、その後

data:image/jpeg;base64, 

を除去されなかった画像を復号していた:私はそれが画像を入れて、設定してもらうことができました

raw_response = RestClient.put(url, 
           file_binary, 
           {:content_type => imageContentType}) 

正しいコンテンツタイプ。私はそれがイメージが正しくデコードされていることを確認しようとしたので、以下の答えは助けになりました。

答えて

0

これは非常に簡単です。まず、base64でエンコードされたファイルをデコードする必要があります。あなたはバイナリファイル表現を得るでしょう。次に、ActionControllersend_dataを使用してバイナリデータを送信します。また、私はそれがユーザーに配信されるようにファイル名を設定しました。

require 'base64' 

class SomeController < ApplicationController 
    def some_action 
    file_name   = permitted_params[:file_name] 
    file_base64_contents = permitted_params[:file_contents] 
    file_binary_contents = Base64.decode64(file_base64_contents) 

    # https://apidock.com/rails/ActionController/Streaming/send_data 
    send_data file_binary_contents, filename: file_name 
    end 
end 

この実装をエラー処理で更新して、アプリケーションのセキュリティを強化することをお勧めします。もう1つは、RestClientを使用しないでください。なぜここにそれが必要ですか? Railsは、コントローラからのHTTP通信に必要なすべてのものを提供します。

ご不明な点がありましたら、お尋ねください。がんばろう。

関連する問題