2011-12-05 26 views
1

私は非常に大量のjsonデータをアップロードするajax(jquery)ポストを行っています。大量のデータを投稿する場合、データは一般にチャンクに分割されます。だから私たちはポストデータ要求を聞いて、アップロードデータのフルバッファを構築しなければなりません。このような何か:nodejs/expressに大量のjsonデータ(ファイルではない)を投稿する方法

function display_form(req, res) { 
    res.sendHeader(200, {"Content-Type": "text/html"}); 
    res.write(
     '<form action="/upload" method="post" enctype="multipart/form-data">'+ 
     '<input type="file" name="upload-file">'+ 
     '<input type="submit" value="Upload">'+ 
     '</form>' 
    ); 
    res.close(); 
} 

しかし、私は(動的である)JSONデータをアップロードする必要があります。

req.on('data', function(chunk) { 
     console.log("upload on data "+ chunk.length); 
     chunks.push(chunk); 
     total+= chunk.length; 
    }); 
    req.on('error', function(e) { 
      console.log('Got Error ' + e.message); 
    }); 
    req.on('end', function() { 
     var buf = new Buffer(total) 
      cur = 0; 
     for (var i = 0, l = chunks.length; i < l; i++) { 
      chunks[i].copy(buf, cur, 0); 
      cur += chunks[i].length; 
     } 

     var level = 1; 
     var path = "level"+level+".json"; 
     writeToFile(buf,path); 
     res.send("Update successfull as level "+level); 
    }); 

これは、私は、フォームを使用してファイルをアップロードしていた場合に動作しているようです。私はこのようにしています:

  $.ajax({ 
       type: "POST", 
       url: "/upload", 
       data: {"data": JSON.stringify(gamePack)}, 
       success: cb, 
      }); 

次に、req 'data'または 'end'にコールバックがないようです。では、ファイルのアップロードとデータのアップロードとはどのように異なるのですか?

+0

はあなたがreq.body' 'で見たことがありますか? 'data'と' end'はデータのストリームのためのものです。 'req.body'これは私の問題を解決しているようだ – Raynos

答えて

1

これは私の問題を解決しているようだ:

$.ajax({ 
     type: "POST", 
     dataType: 'json', 
     url: "/upload", 
     contentType:"application/jsonrequest", 
     data: JSON.stringify(gamePack), 
     success: cb, 
}); 
0

POST 'XMLHttpRequest(これはjQueryが内部で使用しているものです)によるデータはストリーミングされません。アイテム全体がサーバーに送信され、コンテンツが既にロードされているハンドラが起動します(req.body)。これをチャンクされたものにしたい場合は、これを自分で実装する必要があります。たとえば、HTML5 FileSystem APIを使用してファイルを読み取り、チャンクしてwebsocketを使用して、チャンクされたデータをサーバーに書き込みます。私はsocketio-uploadのように何かをしているので、それを調べたいかもしれません。

+0

データの単一の塊のためである: $アヤックス({ タイプ: "POST"、 データ型: 'JSON'、 URL: "/アップロード"、 contentType: "application/jsonrequest"、 データ:JSON.stringify(gamePack)、 成功:cb、 }); – Arun

関連する問題