通过节点获取FTP上载的进度

时间:2017-01-19 09:09:23

标签: node.js electron node-ftp

我有一个Electron应用程序,它使用node-ftp将已删除的文件上传到预定义的服务器。上传就像一个魅力,但尽管阅读了一些建议我无法弄清楚如何获得进度条的实际进度信息。 到目前为止我的上传代码:

var ftp = new Client();
let uploadfile = fs.createReadStream(f.path);
let newname = uuid(); //some function I use for renaming

ftp.on('ready', function () {
    ftp.put(uploadfile, newname, function (err) {
        if (err) throw err;
        ftp.end();
    });
});

c.connect({user: 'test', password: 'test'});

我总是偶然发现监控数据'事件,但无法找到访问它的方式或位置(正如您所看到的,我对JavaScript很新)。

2 个答案:

答案 0 :(得分:9)

知道了。我在streams with percentage complete

中找到了答案

我的代码更改为

var ftp = new Client();
let uploadfile = fs.createReadStream(f.path);
let newname = uuid(); //some function I use for renaming

ftp.on('ready', function() {
    uploadfile.on('data', function(buffer) {
        var segmentLength = buffer.length;
        uploadedSize += segmentLength;
        console.log("Progress:\t" + ((uploadedSize/f.size*100).toFixed(2) + "%"));
    });

    ftp.put(uploadfile, newname, function(err) {
        if (err) throw err;
            ftp.end();
    });
});
c.connect({user: 'test', password: 'test'});

我在控制台中上传了百分比。从这里开始,它只是图形输出的一小步。

答案 1 :(得分:0)

在客户端,您可以为上传流创建字节数http://www.experts.exchange.com/questions/24041115/upload-file-on-ftp-with-progressbar-and-time-left.html

  • 将进度条的下限设置为0
  • 将上限设置为上传文件的文件长度
  • 使用字节数
  • 提供进度条

http://www.stackoverflow.com/questions/24608048/how-do-i-count-bytecount-in-read-method-of-inputstream

也许您可以使用stream-meterhttps://www.npmjs.com/package/stream-meter)或progress-streamhttps://www.npmjs.com/package/progress-stream)等npm来管理文件流以提供进度条。我不确定,因为我不知道npms的内部结构。 progress-stream中的transferred()是一个完全符合

的函数{{1}}

一种非常准确的方法是在服务器上安装代码,向浏览器提供反馈(http://www.stackoverflow.com/questions/8480240/progress-bar-for-iframe-uploads