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..."}]"}
ich würde so etwas wie die CarrierWave Juwel verwenden, um die Zeichenfolge und speichern sie zu entschlüsseln. –
Ok, ich werde das prüfen - danke für den Vorschlag. – skwidbreth