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')
})

問題は、「data」イベントが呼び出されないか、ファイルの間違った部分を(最初からではなく)取得し始めることです。'data'イベントバインディングが発生する前に、実際のデータチャンクが到着し始めているようです。

これにどう対処するか?

4

1 に答える 1

0

問題の原因を見つけました。データ受信コードが、アプリケーションロジックの奥深くにある非同期コールバック内で実行されていたことがわかりました。

この問題は、request.pause()を使用してリクエストハンドラーの先頭でリクエストを一時停止し、アプリロジックのレイヤーを通過した後、「data」イベントと「end」イベントがバインドされた後に再開することで解決されます。

于 2012-12-04T19:34:09.520 に答える