如何将图像二进制文件直接存储到 db(无 GridFS)
How store image binary directly to db (no GridFS)
如何将图像二进制文件直接上传到数据库?我读到只有较大的文件才需要 GridFS。
我的输入:
<template name="pixUpload">
<input type="file" name="myFile" class="myPixInput">
</template>
和模板:
Template.pixUpload.events({
'change .myPixInput': function(event, template) {
event.preventDefault();
var pixBinaryVar = event.target.myFile.value;
MyPix.insert({
binary: pixBinaryVar;
})
}
})
它不起作用,我收到一条错误消息,指出该值未定义。为什么?
对于小图像,您可以选择将图像更改为 base64 并将其存储在数据库中。
这可以通过创建 html canvas 并在其中绘制图像并获取 base64 图像来完成-
这是相同的参考 -
How to convert an image to base64 in JavaScript
Template.pixUpload.events({
'change .myPixInput': function(event, template) {
event.preventDefault();
var file = event.target.files[0]; //assuming you have only 1 file
var reader = new FileReader(); //create a reader according to HTML5 File API
reader.onload = function(event){
var result = reader.result //assign the result, if you console.log(result), you get {}
var buffer = new Uint8Array(result) // convert to binary
MyPix.insert({binary: buffer});
}
reader.readAsArrayBuffer(file); //read the file as arraybuffer
//reader.readAsDataURL(file)
}
})
从 Meteor 1.0 开始,当您在 Meteor.call 或 collection.insert 中发送 binary/buffer 时,它会从客户端转换为 EJSON,然后当它到达服务器时,它会被转换回到原来的binary/buffer
如果您打开 chrome 控制台并查看 websocket 流量,您会看到 EJSON 二进制字符串,它是 base64 编码的。所以另一种方法是使用 reader.readAsDataURL,这会将您的图像直接转换为 base64,从而避免 Meteor 再次执行此操作。
reader.onload = function(event){
MyPix.insert({binary: reader.result});
}
reader.readAsDataURL(file);
如何将图像二进制文件直接上传到数据库?我读到只有较大的文件才需要 GridFS。
我的输入:
<template name="pixUpload">
<input type="file" name="myFile" class="myPixInput">
</template>
和模板:
Template.pixUpload.events({
'change .myPixInput': function(event, template) {
event.preventDefault();
var pixBinaryVar = event.target.myFile.value;
MyPix.insert({
binary: pixBinaryVar;
})
}
})
它不起作用,我收到一条错误消息,指出该值未定义。为什么?
对于小图像,您可以选择将图像更改为 base64 并将其存储在数据库中。
这可以通过创建 html canvas 并在其中绘制图像并获取 base64 图像来完成-
这是相同的参考 -
How to convert an image to base64 in JavaScript
Template.pixUpload.events({
'change .myPixInput': function(event, template) {
event.preventDefault();
var file = event.target.files[0]; //assuming you have only 1 file
var reader = new FileReader(); //create a reader according to HTML5 File API
reader.onload = function(event){
var result = reader.result //assign the result, if you console.log(result), you get {}
var buffer = new Uint8Array(result) // convert to binary
MyPix.insert({binary: buffer});
}
reader.readAsArrayBuffer(file); //read the file as arraybuffer
//reader.readAsDataURL(file)
}
})
从 Meteor 1.0 开始,当您在 Meteor.call 或 collection.insert 中发送 binary/buffer 时,它会从客户端转换为 EJSON,然后当它到达服务器时,它会被转换回到原来的binary/buffer
如果您打开 chrome 控制台并查看 websocket 流量,您会看到 EJSON 二进制字符串,它是 base64 编码的。所以另一种方法是使用 reader.readAsDataURL,这会将您的图像直接转换为 base64,从而避免 Meteor 再次执行此操作。
reader.onload = function(event){
MyPix.insert({binary: reader.result});
}
reader.readAsDataURL(file);