2012-02-17 63 views
1

我想直接向客戶端發送Windows Azure Blob(圖像);我正在嘗試:如何使用Node.js將Windows Azure Blob流式傳輸到客戶端?

blobService.getBlobToStream('images', req.url, res, function(err, blob) { 
    if (!err) { 
     res.writeHead(200, { 'Content-Type': blob.contentType }); 
    } else { 
     res.writeHead(200, { 'Content-Type': 'text/plain' }); 
     res.end(err); 
    } 
}); 

我想將Blob流直接傳遞給響應流;這應該工作嗎?在Firefox中,我收到一條消息:「圖像無法顯示,因爲它包含錯誤」。看着螢火蟲,圖像的大小爲0

+1

可能是一個愚蠢的問題,但爲什麼你想通過自己的託管服務流blob?爲什麼不只是將blob URL返回給客戶端,或者將它們重定向到BLOB URL,並讓它們通過執行HTTP GET來自行流式傳輸。這將爲您節省緩衝/重新流式傳輸的託管成本。對於大量的blob數據,這可以爲您節省大量資金。 – 2012-02-17 19:45:16

+0

好點,邁克,但我期望湯姆正在嘗試。 – 2012-03-07 14:20:19

+0

是的,這個想法是轉換blob(一個圖像),然後再將其傳輸回客戶端(即重新調整大小)。謝謝理查! – tomconte 2012-03-19 13:25:25

回答

3

這似乎prefectly爲我工作(如果這是任何幫助嗎?):

var azure = require('azure'); 
var http = require('http'); 
http.createServer(function (req, res) { 
    var blobService = azure.createBlobService("xxx", "yyy", "blob.core.windows.net").withFilter(new azure.ExponentialRetryPolicyFilter()); 
    blobService.getBlobToStream('container', 'image.png', res, function(error){ 
     if(!error){ 
      res.writeHead(200, {'Content-Type': 'image/png'}); 
      res.end(); 
     } 
     else 
     { 
      console.log('error'); 
      console.log(error); 
      res.end(); 
     } 
    }); 
}).listen(8080, "127.0.0.1"); 

更新

就想通了。 req.url將具有前導斜槓(/)。我猜的是不符合你的圖像文件名。

相關問題