我是 Rails 初学者,我尝试为图像 url 添加载波上传,如 railscast 的第 253 集所示。到目前为止,当我插入普通链接时一切正常,例如
http:/.....g/dog-01.jpg
我的问题是我想从一个提供数据的 javascript 插件中检索我的图像:图像输出,你如何在这里看到:
var url = canvas.toDataURL('image/png');
document.getElementById("canvascontent").value = url;
您还可以看到我将数据:图像插入到输入(#canvascontent)。
<%= ff.text_field :remote_name_url, class => "canvascontent" %>
所以现在我的问题是,当我尝试简单地保存来自 text_field 的 data:image 时,这不起作用:remote_name_url
,因为它是用 base64 编码的。
好消息是 Ruby 有一个 Base64 编码器。为了对 data:image 进行编码并将其保存在图像文件中(此处为 png),我编写了一个简单的代码,可以从控制台执行该代码:
require 'base64'
data_url = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAB....."
png = Base64.decode64(data_url['data:image/png;base64,'.length .. -1])
File.open('testal', 'wb') { |f| f.write(png) }
所以要走到最后。我的问题是我不知道如何用 Rails 实现这一点!我知道模型 before_create 有一个“代码”,我尝试过类似的方法,但没有成功。我想是因为我必须先暂时保护图像!
before_create do
require 'base64'
self.remote_name_url = Base64.decode64(remote_name_url['data:image/png;base64,'.length .. -1])
end
class Painting < ActiveRecord::Base
belongs_to :treatment
attr_accessible :name, :image, :remote_name_url
mount_uploader :name, BildUploader
before_create do
require 'base64'
self.remote_name_url = Base64.decode64(remote_name_url['data:image/png;base64,'.length .. -1])
end
end
<
class TreatmentsController < ApplicationController
def create
@patient = Patient.find(params[:patient_id])
@treatment = @patient.treatments.create(params[:treatment])
redirect_to patient_path(@patient)
end
def destroy
@patient = Patient.find(params[:patient_id])
@treatment = @patient.treatments.find(params[:id])
@treatment.destroy
redirect_to patient_path(@patient)
end
结尾