如何将图像二进制文件直接上传到数据库?我读到只有较大的文件才需要GridFS.
我的意见:
<template name="pixUpload">
<input type="file" name="myFile" class="myPixInput">
</template>
Run Code Online (Sandbox Code Playgroud)
和模板:
Template.pixUpload.events({
'change .myPixInput': function(event, template) {
event.preventDefault();
var pixBinaryVar = event.target.myFile.value;
MyPix.insert({
binary: pixBinaryVar;
})
}
})
Run Code Online (Sandbox Code Playgroud)
它不起作用,我得到一个错误,没有定义该值.为什么?
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)
}
})
Run Code Online (Sandbox Code Playgroud)
从Meteor 1.0开始,当你在Meteor.call或collection.insert中发送二进制文件/缓冲区时,它会从客户端转换为EJSON,然后当它到达服务器时,它会被转换回原始的二进制文件/缓冲区
如果打开chrome控制台并查看websocket流量,则会看到EJSON二进制字符串,它是base64编码的.所以另一种方法是使用reader.readAsDataURL,这会将你的图像直接转换为base64,从而使Meteor不再这样做了.
reader.onload = function(event){
MyPix.insert({binary: reader.result});
}
reader.readAsDataURL(file);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1342 次 |
| 最近记录: |