kev*_*ius 4 javascript filereader fs node.js meteor
我在尝试使用标准<input type="file">元素将图像文件上传到我的公共/文件夹时遇到了一些麻烦.
所以我有这个事件:
"change .logoBusinessBig-upload":function(event, template){
var reader = new FileReader()
reader.addEventListener("load", function(){
Meteor.call("saveFile", reader.result)
})
reader.readAsArrayBuffer(event.currentTarget.files[0])
}
Run Code Online (Sandbox Code Playgroud)
当我在eventListeners回调中执行console.log(reader.result)时,我得到一个ArrayBuffer对象.
在我的server/server.js文件中,我有这个Meteor.method:
saveFile:function(file){
var fs = Npm.require("fs")
fs.writeFile('message.jpg', file, function (err) {
console.log("file saved")
});
}
Run Code Online (Sandbox Code Playgroud)
但是,文件没有保存,控制台永远不会显示"文件已保存".我在这做错了什么?
试试这个
//client.js
'change .logoBusinessBig-upload': function(event, template) {
var file = event.target.files[0]; //assuming you have only 1 file
if (!file) return;
var reader = new FileReader(); //create a reader according to HTML5 File API
reader.onload = function(event){
var buffer = new Uint8Array(reader.result) // convert to binary
Meteor.call('saveFile',buffer);
}
reader.readAsArrayBuffer(file); //read the file as arraybuffer
}
//server.js
'saveFile': function(buffer){
var fs = Npm.require("fs");
fs.writeFile('/location',new Buffer(buffer),function(error){...});
}
Run Code Online (Sandbox Code Playgroud)
说明
您将该文件读取为ArrayBuffer,但当前的DDP无法发送它,因此您将其"转换"为Uint8Array,然后将其转换为Meteor.call
在服务器上,您必须通过调用新缓冲区(缓冲区)来保存它.'/ location'不能在meteor文件夹中,因为这会触发重载,可能会将其保存到某些TmpDir
| 归档时间: |
|
| 查看次数: |
1974 次 |
| 最近记录: |