我正在使用Request上传文件。
req = request.post url: "http://foo.com", body: fileAsBuffer, (err, res, body) ->
console.log "Uploaded!"我如何知道实际上传了多少数据?是否有我可以订阅的事件,或者是否有我可以轮询的request属性?
如果没有,那么上传数据并知道已经上传了多少数据的最佳方法是什么?
发布于 2013-08-21 04:34:37
我需要一个句柄的上传进度为我的另一个项目。
我发现您可以轮询request的connection._bytesDispatched属性。
例如:
r = request.post url: "http://foo.com", body: fileAsBuffer
setInterval (-> console.log "Uploaded: #{r.req.connection._bytesDispatched}"), 250注意:如果您通过管道连接到r,则轮询r.req.connection.socket._bytesDispatched。
发布于 2016-09-14 21:50:00
我花了几个小时在request和node源代码中找到任何有效的东西,最后找到了一种不同的方法,这对我来说更正确。
我们可以依赖drain事件和bytesWritten属性:
request.put({
url: 'https://example.org/api/upload',
body: fs.createReadStream(path)
}).on('drain', () => {
console.log(req.req.connection.bytesWritten);
});或者,如果您需要处理文件字节的进度,则更容易使用流data事件:
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.0和request v2.74.0上似乎工作得很好。
发布于 2018-03-07 21:24:15
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);
}https://stackoverflow.com/questions/12098713
复制相似问题