Im rails beginner我试图为图像网址添加一个载波上传,如railscast中的第253集中所示。到目前为止,当我插入普通链接时,所有工作都很好,例如
http:/.....g/dog-01.jpg
我的问题是我想从一个提供数据的javascript插件中检索我的图像:图像输出,你可以在这里看到:
var url = canvas.toDataURL('image/png');
document.getElementById("canvascontent").value = url;
您还可以看到我将数据:image插入输入(#canvascontent)。
<%= ff.text_field :remote_name_url, class => "canvascontent" %>
所以现在我的问题是,当我尝试简单地保存text_field :remote_name_url
中的数据:图像时,这不起作用,因为它是用base64编码的。
好的是Ruby有一个Base64编码器。要编码数据:图像并将其保存在图像文件中(这里是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
&LT;
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
端
答案 0 :(得分:0)
来自Carrierwave wiki的这篇文章似乎很有希望:
https://github.com/carrierwaveuploader/carrierwave/wiki/How-to%3A-Upload-from-a-string-in-Rails-3
还有使用Rack::Test::UploadedFile
和StringIO
对象的旧技术,但在代码中看起来更奇怪,而不是用于测试环境。