2013-07-28 224 views
4

我想gzip並上傳一個靜態js文件到Azure blob,但我最終得到一個0字節的blob。有人能告訴我我做錯了什麼嗎?Gzip並上傳到Azure blob

var filePath = "C:\test.js"; 

using (var compressed = new MemoryStream()) { 
using (var gzip = new GZipStream(compressed, CompressionMode.Compress)) { 
    var bytes = File.ReadAllBytes(filePath); 
    gzip.Write(bytes, 0, bytes.Length); 

    var account = CloudStorageAccount.Parse("..."); 
    var blobClient = new CloudBlobClient(account.BlobEndpoint, account.Credentials); 
    var blobContainer = blobClient.GetContainerReference("temp"); 
    var blob = blobContainer.GetBlockBlobReference(Path.GetFileName(filePath)); 
    blob.Properties.ContentEncoding = "gzip"; 
    blob.Properties.ContentType = "text/javascript"; 
    blob.Properties.CacheControl = "public, max-age=3600"; 

    blob.UploadFromStream(compressed); 
} 
} 
+0

在發佈有關Storage客戶端的問題時,包含您正在使用的存儲庫的版本會非常有幫助。版本之間有差異。 – MikeWo

回答

5

您需要將壓縮流上的流位置重置爲零。您已經將數據寫入流中,但是當您從最後一行的流中上載時,流的位置在您寫入的數據的末尾,因此blob.UploadFromStream將從當前位置開始流,它沒有任何東西。

添加下面的執行上傳之前:

compressed.Position = 0; 

這應該上傳流的全部內容。

這不一定是一個Azure的事情,大多數與流一起工作的代碼操作流的當前位置。我被它燒過幾次了。

+0

就是這樣。謝謝! – user2628438