2

一个描述问题的简单案例......客户端(使用 HTML5 文件 API 和 XMLHttpRequest2):

var xhr = new XMLHttpRequest ()
xhr.open ('POST', '/upload', true)
xhr.send (file) /* sends as plain binary blob, no multipart/form-data */

服务器端:

var size = 0
request.setEncoding ('binary')
request.on ('data', function (chunk) {
    console.log ('Received ' + (size += chunk.length) / (1024.0 * 1024.0) + ' Mb')
})
request.on ('end', function (chunk) {
    console.log ('Done')
})

问题是“数据”事件要么永远不会被调用,要么开始拾取文件的错误部分(不是从头开始)。似乎实际数据块在“数据”事件绑定发生之前开始到达。

如何处理?

4

1 回答 1

0

我找到了导致问题的原因,结果发现我的数据接收代码是在应用程序逻辑深处的异步回调中执行的。

通过在请求处理程序的开头使用 request.pause() 暂停请求,并在它通过应用程序逻辑层,在绑定“数据”和“结束”事件之后恢复它,可以解决这个问题。

于 2012-12-04T19:34:09.520 回答