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
パラメータ
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..."}]"}
は、私は、文字列をデコードし、それを保存するためにCarrierWaveの宝石のようなものを使用します。 –
さて、私はそれを調べます - 提案に感謝します。 – skwidbreth