【发布时间】:2016-06-25 22:07:58
【问题描述】:
是否有人熟悉从 Rails 应用程序将 base64 编码的图像上传到 AWS S3 存储桶?我最近关注this tutorial 使用 AWS-SDK gem,它运行良好 - 对我来说唯一的问题是这解决了从一个好的老式 rails 表单助手上传的问题,我的上传是通过一个 JSON 字符串传递的通过 AJAX 进入控制器。具体来说,我需要有关如何设置控制器的指导,以便它为 AWS 正确拼凑数据。
教程中的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( 的“字符串包含空字节”错误,不过(我并没有真正期望它能够工作 - 我确定它也有其他问题......比如获取原始文件名......)。对此的任何指导将不胜感激。
为了确保我的数据看起来正确,以下是image 键/值在:report 参数中的显示方式(来自我的控制台):
Parameters: {"report"=>"[{"image\":\"data:image/jpeg;base64,/9j/4AAQSkZJR..."}]"}
【问题讨论】:
-
我会使用 CarrierWave gem 之类的东西来解码字符串并存储它。
-
好的,我会调查的 - 谢谢你的建议。
标签: ruby-on-rails ruby amazon-web-services base64