gpt4 book ai didi

javascript - Meteor:在客户端使用 FileReader 上传图像文件,在服务器上使用 Npm.require ("fs")

转载 作者:搜寻专家 更新时间:2023-10-31 23:02:07 24 4
gpt4 key购买 nike

我在尝试使用标准 <input type="file"> 将图像文件上传到我的 public/文件夹时遇到了一些问题元素。

所以我有这个事件:

      "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])

}

当我在 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")

});

}

但是,文件不会被保存,控制台也不会显示“文件已保存”。我在这里做错了什么?

最佳答案

试试这个

//客户端.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){...});

}

解释

您将文件读取为 ArrayBuffer,但当前 DDP 无法发送它,因此您将其“转换”为 Uint8Array,然后使用 Meteor.call

在服务器上,则必须通过调用 new Buffer(buffer) 进行转换以保存它。 '/location' 不能在 meteor 文件夹中,因为这会触发重新加载,也许将其保存到某个 TmpDir

关于javascript - Meteor:在客户端使用 FileReader 上传图像文件,在服务器上使用 Npm.require ("fs"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26868200/

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