【问题标题】:Getting a progress for an FTP-upload with node使用节点获取 FTP 上传的进度
【发布时间】:2017-01-19 09:09:23
【问题描述】:

我有一个 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'});

我总是偶然发现监控 'data' 事件,但不知道如何或在何处访问它(如您所见,我对 JavaScript 很陌生)。

【问题讨论】:

    标签: node.js electron node-ftp


    【解决方案1】:

    知道了。我在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'});
    

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

    【讨论】:

    • 如何做同样的事情来下载?请指教
    【解决方案2】:

    在客户端,您可以为您的上传流创建一个字节数 (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-meter (https://www.npmjs.com/package/stream-meter) 或progress-stream (https://www.npmjs.com/package/progress-stream) 这样的npm 并通过管道传输您的文件流以提供进度条。我不确定,因为我不知道 npms 的内部结构。在progress-stream 中是一个完全适合的函数transferred()

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

    【讨论】:

    • 谢谢,但我还是不明白。我的问题不是如何从数据中获取进度条,而是更多的是“如何从我拥有的变量中获取实际上传的数据量”?我如何访问这些信息?提供的示例使用 Java 而不是 JavaScript,npm 肯定会工作,但我不知道如何工作。顺便说一句,准确性不是问题 - 我只是想提供一些视觉反馈。
    猜你喜欢
    • 2012-03-03
    • 2019-03-04
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多