2016-06-25 16 views
0

Base64でエンコードされたイメージをRailsアプリケーションからAWS S3バケットにアップロードするのに慣れている人はいますか?私は最近、this tutorialのAWS-SDK gemを使用していましたが、うまくいきました。私の唯一の問題は、良い形式のレールフォームヘルパーからのアップロードに対処していて、アップロードがJSON文字列でコントローラを介してAJAX。具体的には、コントローラをセットアップしてAWS用にデータを正しく結合する方法のガイダンスが必要です。Rails - Base64イメージをAWS S3バケットに送信するコントローラ

チュートリアルからcreateコントローラはそうのようになります。

def create 
    obj = S3_BUCKET.objects[params[:file].original_filename] 

    obj.write(
     file: params[:file], 
     acl: :public_read 
    ) 

    @upload = Upload.new(
     url: obj.public_url, 
     name: obj.key 
    ) 

    if @upload.save 
    redirect_to uploads_path, success: 'File successfully uploaded' 
    else 
    flash.now[:notice] = 'There was an error' 
    render :new 
    end 
end 

が、鉱山は:reportパラメータ

で符号化された画像は、JSON文字列の一部であり、以下のコントローラのようなより多くのものを見てする必要があります
require "base64" 
def create 

    @incomingReport = ActiveSupport::JSON.decode(params[:report]) 

    @incomingReport.each do |x| 

     hash = ActionController::Parameters.new(x) 

     #IMAGE PROCESSED HERE - THIS DOESN'T WORK, BUT IT IS ILLUSTRATIVE OF WHAT I BELIEVE I NEED 
     if hash["image"] 
      data = Base64.decode64(hash["image"]) 
      obj = S3_BUCKET.objects[data] 
      obj.write(
       file: data, 
       acl: :public_read 
      ) 
      @url = obj.public_url 
     end 

     @new_report = Report.new(report_params(hash)) 
     @new_report.image_url = @url 
     @new_report.save 
    end 

    redirect_to root_path 
end 

したがって、上記のコントローラは、私が達成しようとしているものを基本的にある - のコードを実行するとobj.write(を指しエラー「文字列はNULLバイトが含まれている」を生成する、(私は本当にのExPECませんでしたがそれがうまく動くように - 私はそれもまた元のファイル名を得るのと同じように他の問題もあると確信しています...)。これについてのガイダンスは非常に高く評価されます。

ちょうど私のデータが正確に見える確かに、ここimageキー/値が(私のコンソールから):reportパラメータで表示される方法は次のとおりです。

Parameters: {"report"=>"[{"image\":\"data:image/jpeg;base64,/9j/4AAQSkZJR..."}]"} 
+0

は、私は、文字列をデコードし、それを保存するためにCarrierWaveの宝石のようなものを使用します。 –

+0

さて、私はそれを調べます - 提案に感謝します。 – skwidbreth

答えて

3

私はそれますように見えるこの便利なガイドを見つけましたトリックを行う:

http://sebastiandobrincu.com/blog/how-to-upload-images-to-rails-api-using-s3

+0

私はFog.rbファイルを持っていません – user3542450

+0

@ user3542450あなたはFog gemをインストールする必要があります - https://github.com/fog/fog – skwidbreth

+0

私はすでに霧の宝石がインストールされています – user3542450

関連する問題