是否有人熟悉將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..."}]"}
我會用CarrierWave gem這樣的東西解碼字符串並存儲它。 –
好的,我會研究一下 - 謝謝你的建議。 – skwidbreth