2016-06-25 38 views
0

是否有人熟悉將Rails應用程序中的base64編碼圖像上傳到AWS S3存儲桶?我最近關注使用AWS-SDK gem的this tutorial,它工作得非常好 - 對我來說唯一的問題是這個地址是從一個好的老式的rails形式助手上傳的,而且我的上傳是通過一個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 

但該礦將需要更多的類似於下面的控制器,其中編碼圖像是JSON字符串的一部分即是:report參數

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(指向誤差,但(我是不是真的EXPEC讓它工作 - 我確定它也有其他問題,比如獲取原始文件名......)。任何關於此的指導將非常感激。

只是要確保我的數據看起來是正確的,這裏的image鍵/值如何出現在:report參數(從我的控制檯):

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

我會用CarrierWave gem這樣的東西解碼字符串並存儲它。 –

+0

好的,我會研究一下 - 謝謝你的建議。 – skwidbreth

回答