gpt4 book ai didi

ruby-on-rails - 如何在Rails4中使用Carrierwave在Blob中保存base64图像?

转载 作者:行者123 更新时间:2023-12-04 03:37:48 25 4
gpt4 key购买 nike

this Tutorial中所述,我将 Canvas 转换为DataUrl,并将此DataUrl转换为Blob。然后,我发出ajax发布请求,并想使用Carrierwave将图像保存在数据库中。

这是我的JS代码:

uploadButton.on('click', function(e) {

var dataURL = mycanvas.toDataURL("image/png;base64;");

// Get our file
var file= dataURLtoBlob(dataURL);

// Create new form data
var fd = new FormData();

// Append our Canvas image file to the form data
fd.append("image", file);

// And send it
$.ajax({
url: "/steps",
type: "POST",
data: fd,
processData: false,
contentType: false,
});
});

// Convert dataURL to Blob object
function dataURLtoBlob(dataURL) {

// Decode the dataURL
var binary = atob(dataURL.split(',')[1]);

// Create 8-bit unsigned array
var array = [];
for(var i = 0; i < binary.length; i++) {
array.push(binary.charCodeAt(i));
}

// Return our Blob object
return new Blob([new Uint8Array(array)], {type: 'image/png'});
}

当我将以下代码添加到 Controller 中时,就会保存图像,但当然不会通过载波。
File.open("#{Rails.root}/public/uploads/somefilename.png", 'wb') do |f|
f.write(params[:image].read)
end

更新信息:

这些是我的ajax发布请求的参数:
Parameters: {"image"=>#<ActionDispatch::Http::UploadedFile:0x007feac3e9a8a8 @tempfile=#<Tempfile:/var/folders/0k/q3kc7bpx3_51kc_5d2r1gqcc0000gn/T/RackMultipart20140211-1346-gj7kb7>, @original_filename="blob", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"image\"; filename=\"blob\"\r\nContent-Type: image/png\r\n">}

这些是标准文件上传的参数:
Parameters: {"utf8"=>"✓", "image"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x007feac20c2e20 @tempfile=#<Tempfile:/var/folders/0k/q3kc7bpx3_51kc_5d2r1gqcc0000gn/T/RackMultipart20140211-1346-1ui8wq1>, @original_filename="burger.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"image[image]\"; filename=\"xy.jpg\"\r\nContent-Type: image/jpeg\r\n">}}

如果我执行 Image.create(params[:image]),我会进行交易回滚...

事务回滚错误:
Unprocessable Entity
ActiveRecord::RecordInvalid (Validation failed: image You are not allowed to upload "" files, allowed types: jpg, jpeg, gif, png)

最佳答案

您正在将允许的文件类型列入白名单。默认情况下,Carrierwave会尝试通过文件扩展名来确定文件类型-由于这实际上是一个Blob对象,因此不会被传递。因此,您会收到有关文件“类型”的验证错误。要解决此问题,只需为blob对象添加所需的文件扩展名即可:

if params[:image].try(:original_filename) == 'blob'
params[:image].original_filename << '.png'
end

Image.create!(image: params[:image])

关于ruby-on-rails - 如何在Rails4中使用Carrierwave在Blob中保存base64图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21707595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com