1

nodeとnode-ftpモジュールを使用しています。2つのファイルを別のサーバーにアップロードする必要があります。1つのファイルをアップロードできますが、2つのファイルをアップロードしようとすると、エラーが発生します。

彼らの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();
});

これは正常に機能しますが、2つのファイルを実行する場合は、その機能を繰り返す必要があると思いますが、機能しません。FTPClientを使用して2つ以上のファイルを送信する方法を知っている人はいますか

これが私が実行しようとしているコードです

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();
  });
});
4

2 に答える 2

2

両方のファイルが連続してアップロードされるまで、接続を終了しないでください。

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();
            });  
        });
    }
);
于 2012-08-28T18:03:47.853 に答える
1

私はFTPimpの作成者であり、他のノードFTPモジュールとは異なり、FTPimpにはすべてを非同期かつ順次実行する独自のキューがあるため、次の方法でコールバックの地獄と結合の依存関係を回避できます。

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()、ログも少し簡単になります:)乾杯

于 2015-10-15T14:50:11.000 に答える