Can';t使用FTPClient node.js模块上载两个或多个文件

Can';t使用FTPClient node.js模块上载两个或多个文件,node.js,put,ftp-client,Node.js,Put,Ftp Client,我正在使用node和node ftp模块。我需要上传两个文件到另一个服务器,我可以上传一个文件,但当我尝试上传两个文件时,它会抛出错误 根据他们的api,这是用于发送文件的代码 var fs = require('fs'); conn.put(fs.createReadStream('/var/www/videoComplete/'+ videoID +'.flv'), '/home/wowza/content/'+ videoID +'.flv', function(e) { consol

我正在使用node和node ftp模块。我需要上传两个文件到另一个服务器,我可以上传一个文件,但当我尝试上传两个文件时,它会抛出错误

根据他们的api,这是用于发送文件的代码

var fs = require('fs');
conn.put(fs.createReadStream('/var/www/videoComplete/'+ videoID +'.flv'), '/home/wowza/content/'+ videoID +'.flv', function(e) {
  console.log(fileName + '.flv uploaded to Streaming Server :)');
  conn.end();
});
这很好,但如果我想做两个文件,我想我必须重复这个函数,但它不起作用。有人知道如何使用FTPClient发送两个或多个文件吗

下面是我试图执行的代码

conn = new FTPClient({ host: 'serverIP' });
conn.on('connect', function() {
  conn.auth('user', 'pass', function(e) {
    if (e) throw e;
    var fs = require('fs');

    conn.put(fs.createReadStream('/var/www/ce-videoComplete/'+ videoID +'.flv'), '/home/wowza/content/'+ videoID +'.flv', function(e) {
      console.log(fileName + '.flv uploaded to Streaming Server :)');
      conn.end();
    });

    conn.put(fs.createReadStream('/var/www/ce-thumbnails/'+ videoID +'.jpg'), '/var/www/html/thumbnails/'+ videoID +'.jpg', function(e) {
      console.log(fileName + '.jpg uploaded to Streaming Server :)');
      conn.end();
    });

  });
});
conn.connect();
更新:我也尝试过,但无法再次连接

conn.put(fs.createReadStream('/var/www/ce-videoComplete/'+ videoID +'.flv'), '/home/wowza/content/'+ videoID +'.flv', function(e) {
  console.log(fileName + '.flv uploaded to Streaming Server :)');
  conn.end();

  conn.put(fs.createReadStream('/var/www/ce-thumbnails/'+ videoID +'.jpg'), '/var/www/html/thumbnails/'+ videoID +'.jpg', function(e) {
    console.log(fileName + '.jpg uploaded to Streaming Server :)');
    conn.end();
  });
});

在连续上载两个文件之前,不要结束连接:

conn.put(fs.createReadStream('/var/www/ce-videoComplete/'+ videoID +'.flv'), 
    '/home/wowza/content/'+ videoID +'.flv',
    function(e) {
        console.log(fileName + '.flv uploaded to Streaming Server :)');

        conn.put(fs.createReadStream('/var/www/ce-thumbnails/'+ videoID +'.jpg'),
            '/var/www/html/thumbnails/'+ videoID +'.jpg', 
            function(e) {
                console.log(fileName + '.jpg uploaded to Streaming Server :)');
                // Now that both files are uploaded, end the connection.
                conn.end();
            });  
        });
    }
);
我是的作者,与任何其他节点FTP模块不同,FTPimp有一个专有队列,以异步顺序运行所有内容,因此您可以通过以下方式避免回调地狱和耦合依赖:


由于
FTPimp.put()
将文件名传递给回调函数,您的日志也变得简单了:)干杯

您的代码通过一个FTP不支持的连接同时上载两个文件。尝试将第二个
conn.put
放在第一个的回调中。我刚刚尝试了你的建议,这是有意义的,因此我在第二次回调后从第一个回调中移动了}):它上载了第一个文件,但似乎没有运行下一个conn.put第二次有什么想法吗?我发布了我在上面尝试过的代码。你不认为知道抛出了哪个错误是有意义的吗?(在回调中使用
if(e)console.error(e);
)并确保在第一次文件上载后连接未关闭/出错/结束/etc(侦听适当的事件)<如果操作不可用,code>put也会立即返回
false
。@ThomasDepole查看我发布的答案。我应该在评论之前注意到:)还有一件事-@Thomas,使用或类似的lib。谢谢!!你们两个!成功了。我希望这个模块的作者在文档中写更多的例子,至少这个例子并使用用户名和密码。但谢谢你们@ThomasDepole elmigranto在检查回调中的
e
error参数方面做得很好;记录日志很可能会帮助您发现发生了什么。我这样做了,我去掉了抛出的e,以使本文的代码更短。但它抛出了一个错误,但什么也没说。这条线上基本上只有e。
ftp.put(['/var/www/ce-videoComplete/'+ videoID +'.flv', '/home/wowza/content/'+ videoID +'.flv'], function (err, filename) {
    console.log(fileName + 'uploaded to Streaming Server :)');
});
ftp.put(['var/www/ce-thumbnails/'+ videoID +'.jpg', '/var/www/html/thumbnails/'+ videoID +'.jpg'], function(err, filename) {
    console.log(fileName + ' uploaded to Streaming Server :)');
    ftp.quit();
});