Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用节点ftp从图像中获取二进制文件?_Node.js_Ftp_Sharp - Fatal编程技术网

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服务器通信的异步接口