用户可以将文档发布到我们的Web服务.我们将其流到其他地方 但是,在流式传输结束时,我们需要确保他们不会对内容长度撒谎.
我假设,如果headerContentLength > realContentLength请求将等待他们发送其余的,最终超时.所以这可能没关系.
怎么样headerContentLength < realContentLength?即如果他们说完成后他们继续发送数据怎么办?
这是由Node.js以任何方式处理的吗?如果没有,有什么好办法检查?我想我可以计算一些data事件监听器内的字节数- 即req.on("data", function (chunk) { totalBytes += chunk.length; }).这似乎是一个kludge.
要检查请求的实际长度,您必须自己添加它。这些data块是Buffers 并且它们有一个.length可以相加的属性。
如果您使用 指定编码request.setEncoding(),则您的data块将改为Strings 。在这种情况下,请致电Buffer.byteLength(chunk)获取长度。(Buffer是节点中的全局对象。)
将每个块的总数相加,您就会知道发送了多少数据。这是一个粗略的(未经测试的)示例:
https.createServer(function(req, res) {
var expected_length = req.headers['content-length']; // I think this is a string ;)
var actual_length = 0;
req.on('data', function (chunk) {
actual_length += chunk.length;
});
req.on('end', function() {
console.log('expected: ' + expected_length + ', actual: ' + actual_length);
});
});
Run Code Online (Sandbox Code Playgroud)
注:length指Buffer内容的最大长度,而非实际长度。然而,它在这种情况下是有效的,因为块缓冲区总是以精确正确的长度创建的。如果您在其他地方使用缓冲区,请注意这一点。
| 归档时间: |
|
| 查看次数: |
1572 次 |
| 最近记录: |