2016-02-10 41 views
0

我正在執行一個azure批處理作業,它會創建一個zip文件作爲其輸出。該批處理由協調器執行,負責將輸出文件移至blob。我有這個工作,但感覺笨重 - 就是我在本地下載文件到協調器,然後上傳到BLOB:將批處理作業中的文件移動到blob

CloudTask task; // executed task... 
var node = task.GetNodeFile(fileName); 
using (var stream = File.OpenWrite(localFile)) 
{ 
    node.CopyToStream(stream); 
} 

var blobRef = _blobContainer.GetBlockBlobReference(blobFileName); 
blobRef.UploadFromFile(localFile, FileMode.Open); 

我嘗試了一滴流通過直接的CopyToStream方法,但沒有被轉移到BLOB :

node.CopyToStream(blobRef.OpenWrite()); 

是否有可能將輸出文件從批處理虛擬機複製到blob沒有這個額外的跳躍?

回答

1

您可以通過使用一個內存流做到這一點:

CloudTask task; // executed task... 
var node = task.GetNodeFile(fileName); 

using (var ms = new MemoryStream()) 
{ 
    node.CopyToStream(ms); 

    var blobRef = _blobContainer.GetBlockBlobReference(blobFileName); 
    blobRef.UploadFromStream(ms); 
} 
+0

謝謝。它確實發生在我身上,唯一的問題是一些zip文件將超過1GB,甚至可能是3或4. – NDJ

+0

我接受這一點,因爲它是一個工作解決方案,我沒有提及文件大小。 – NDJ

0

答案是其實很簡單 - 處置雲裁判流似乎強制刷新 - 即:

CloudTask task; // executed task... 
var node = task.GetNodeFile(fileName); 

using(var stream = _blobContainer.GetBlockBlobReference(blobFileName)) 
{ 
    node.CopyToStream(stream); 
} 
相關問題