首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >上传进度-请求

上传进度-请求
EN

Stack Overflow用户
提问于 2012-08-24 03:29:06
回答 5查看 11.4K关注 0票数 15

我正在使用Request上传文件。

代码语言:javascript
复制
req = request.post url: "http://foo.com", body: fileAsBuffer, (err, res, body) ->
    console.log "Uploaded!"

我如何知道实际上传了多少数据?是否有我可以订阅的事件,或者是否有我可以轮询的request属性?

如果没有,那么上传数据并知道已经上传了多少数据的最佳方法是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-08-21 04:34:37

我需要一个句柄的上传进度为我的另一个项目。

我发现您可以轮询requestconnection._bytesDispatched属性。

例如:

代码语言:javascript
复制
r = request.post url: "http://foo.com", body: fileAsBuffer
setInterval (-> console.log "Uploaded: #{r.req.connection._bytesDispatched}"), 250

注意:如果您通过管道连接到r,则轮询r.req.connection.socket._bytesDispatched

票数 11
EN

Stack Overflow用户

发布于 2016-09-14 21:50:00

我花了几个小时在requestnode源代码中找到任何有效的东西,最后找到了一种不同的方法,这对我来说更正确。

我们可以依赖drain事件和bytesWritten属性:

代码语言:javascript
复制
request.put({
  url: 'https://example.org/api/upload',
  body: fs.createReadStream(path)
}).on('drain', () => {
  console.log(req.req.connection.bytesWritten);
});

或者,如果您需要处理文件字节的进度,则更容易使用流data事件:

代码语言:javascript
复制
let size = fs.lstatSync(path).size;
let bytes = 0;

request.put({
  url: 'https://example.org/api/upload',
  body: fs.createReadStream(path).on('data', (chunk) => {
    console.log(bytes += chunk.length, size);
  })
});

流缓冲区大小为65536字节,读取/排出过程迭代运行。

这对我来说在node v4.5.0request v2.74.0上似乎工作得很好。

票数 13
EN

Stack Overflow用户

发布于 2018-03-07 21:24:15

代码语言:javascript
复制
var request = require('request');
    var fs = require('fs');  
    let path ="C:/path/to/file";
    var formData = {
        vyapardb: fs.createReadStream(path)
    };

    let size = fs.lstatSync(path).size;

    var headers = {
        'Accept' : 'application/json',
        'Authorization' : 'Bearer '+token,
    };

    var r = request.post({url:'http://35.12.13/file/upload', formData: formData,  headers: headers}, function optionalCallback(err, httpResponse, body) {
        clearInterval(q);

    });
    var q = setInterval(function () {
        var dispatched = r.req.connection._bytesDispatched;
        let percent = dispatched*100/size;
         console.dir("Uploaded: " + percent + "%");

    }, 250);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12098713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档