2013-02-07 32 views
0
curl -v -F "[email protected]" http://server/handler 

我知道「bigfile.zip」會被拆分成幾個部分並逐個發送到服務器,可能需要很長時間。那麼我怎麼才能在發送最後一部分之前閱讀第一部分?如果Apache/Nginx + PHP/Python無法實現,那麼使用node.js構建另一個HTTP服務器又怎麼樣?在完成之前處理POST請求的一部分,這可能嗎?

我想找到的是一個「長期請求」(另一方如「長輪詢」)。瀏覽器可以通過使用存在的長請求立即寫入服務器,而無需創建新請求。

有什麼建議嗎?

=================

連接:保持活動?

回答

0

這是一個長壽命的HTTP POST請求的在

變種HTTP =要求( 'HTTP')的node.js一個例子的代碼;

var server = http.createServer(function(req, res) { 
    if(req.method == 'POST' && req.url == '/handler') { 
     req.on('data', function(data) { 
      // i'm getting chunks of data in here ! 
     }); 
     req.on('end', function() { 
      res.writeHead(200, 'OK'); 
      res.end('Got your file\n'); 
     }); 
    } 
    else { 
     res.writeHead(404, 'Not Found'); 
     res.end(); 
    } 
}); 
server.listen(80); 

當然這是最基本的例子,通過http上傳的文件稍微複雜一些。這就是爲什麼使用像formidable這樣的東西可能有用。

使用節點,一旦獲取數據,您就可以開始將其發送到可以處理它們的其他地方,即使其餘數據仍然來臨。通常你會使用流

這是如何做到這一點http://debuggable.com/posts/streaming-file-uploads-with-node-js:4ac094b2-b6c8-4a7f-bd07-28accbdd56cb

0

如果我正確地閱讀了您的問題,您希望在上載完成之前開始處理上傳的zip文件中的數據。

您需要某種streaming zip parser可以接收傳入的字節流,確定特定文件何時結束並應用適當的解壓縮。

Physical layout of a zip file

你會發現,在文件條目的開頭,有一個30多字節header(深藍色),將告訴你的壓縮文件有多長。您可以讀取傳入的字節,直到達到該長度,然後處理下一個文件的標題並重復。

隨着傳入的字節被讀取,您將它們傳遞給解壓縮器。 Zip文件支持許多類型的壓縮,所以你必須使用文件頭部指定的文件。

最後,你的解壓縮程序會給你一個解壓字節流。您可以將它們寫入磁盤或使用它們做其他事情。

節點非常適合處理流。 Apache和Nginx並沒有真正給你提供對實現目標所需的請求週期的控制級別。

+0

的最佳解決方案,感謝您的幫助的例子。但我的目標是找到一個「長期請求」解決方案,這可能非常簡單。我需要的是如何從大的POST請求中讀取第一部分(在它實際完成之前)。你能否提供一些示例代碼? – Alix

相關問題