2013-07-28 55 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