Node.js 如何使用节点ftp从图像中获取二进制文件?
我想使用Node.js 如何使用节点ftp从图像中获取二进制文件?,node.js,ftp,sharp,Node.js,Ftp,Sharp,我想使用sharp.rotate()从图像中获取二进制文件进行旋转 我试着这样做content+=chunk但不起作用 let Client = require('ftp'); let fs = require('fs'); let sharp = require('sharp'); let path = 'users/'+userId+'/headerImage/header'; let Ftp = new Client();//crea
sharp.rotate()从图像中获取二进制文件进行旋转代码>
我试着这样做content+=chunk代码>但不起作用
let Client = require('ftp');
let fs = require('fs');
let sharp = require('sharp');
let path = 'users/'+userId+'/headerImage/header';
let Ftp = new Client();//create new istance of Ftp
//Start. Here we get image from server
await Ftp.on('ready', function(){
Ftp.get(path, async function(err, stream){
if(err){
res.status(400).send(err);
};
var content = '';
await stream.on('data', async (chunk) => {
content += chunk;
});
await stream.on('end', async function(){
console.log(content);
let image = await sharp(content);
await image
.rotate(90)
.toBuffer()
.then(async data => {
console.log(data);
})
.catch(error => {
console.log(error);
});
Ftp.end();
});
});
});
await Ftp.connect({
host: fileTransferProtocol.host,
port: fileTransferProtocol.port,
user: fileTransferProtocol.user,
password: fileTransferProtocol.pass
});
控制台:错误:[错误:输入文件丢失]
我认为您遇到的问题是没有将传入数据作为缓冲区处理。Ftp.get
回调中的stream
变量的类型为。默认情况下,流数据将作为Buffer
对象返回,除非使用该方法为数据指定编码
出于特定目的,您希望将数据作为缓冲区
对象处理,因为这正是sharp
函数所期望的。要将传入数据存储到缓冲区
中,请修改数据
事件上发生的操作
var content = new Buffer(0);
stream.on("data", async chunk => {
content = Buffer.concat([content, chunk]);
});
另外,我认为您没有及时使用async/await
。ftp
模块使用回调和事件运行,而不是承诺。用wait
附加这些函数不会使它们同步运行
请查看以下链接以查找有关此功能的更多信息:
如果您想让我们async/wait
处理您的ftp
请求,请尝试此模块:
它提供了与FTP服务器通信的异步接口