无法使用FTPClient node.js模块上传两个或更多文件
我正在使用节点和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(); });
这工作正常,但如果我想要做两个文件,我假设我将不得不重复该function,但它不会工作。 有谁知道如何使用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(); }); }); } );
我是FTPimp的作者, FTPimp不同于任何其他的FTP FTP模块,FTPimp拥有一个专有的队列,可以asynchronous和顺序地运行所有的东西,所以你可以通过下面的方式来避免callback地狱和耦合依赖:
FTPimp.put
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(); });
并且由于FTPimp.put()
将文件名传递给callbackFTPimp.put()
,所以你的日志也会更简单一点:)干杯