2016-06-25 4 views
0

Ist jemand mit dem Hochladen von base64-codierten Bildern in einen AWS S3-Bucket aus einer Rails-App vertraut? Ich folgte vor kurzem this tutorial auf die Verwendung der AWS-SDK-Juwel und es funktionierte sehr gut - das einzige Problem für mich ist, dass dies den Upload von einem guten alten 'Forms-Helfer Helfer, und mein Upload kommt in einer JSON-String in die übergeben Controller über AJAX. Insbesondere benötige ich eine Anleitung zum Einrichten meines Controllers, damit die Daten für AWS korrekt zusammengestellt werden.Rails - Controller zum Senden von base64-Bildern an AWS S3-Buckets

Der create Controller aus dem Tutorial sieht so aus:

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 

aber er wird etwas mehr wie die Steuerung unten, wo das codierte Bildteil des JSON-String ist, dass die :report Parameter suchen muß

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 

So ist der Controller oben ist im Grunde, was ich zu tun versuchen, - den Code ausgeführt wird erzeugt ein Fehler ‚string null Byte enthält‘ an obj.write( zeigt, obwohl (ich war nicht wirklich expec es funktioniert - ich bin mir sicher, dass es auch andere Probleme hat ... wie den ursprünglichen Dateinamen zu bekommen ...). Jede Anleitung dazu wäre sehr willkommen.

Nur um sicherzugehen meine Daten korrekt aussieht ist hier, wie die image Schlüssel/Wert im :report Parameter erscheint (aus meiner Konsole):

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

ich würde so etwas wie die CarrierWave Juwel verwenden, um die Zeichenfolge und speichern sie zu entschlüsseln. –

+0

Ok, ich werde das prüfen - danke für den Vorschlag. – skwidbreth

Antwort

Verwandte Themen