5

我正在尝试 gzip 并将静态 js 文件上传到 Azure blob,但我最终得到了一个 0 字节的 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);
}
}
4

1 回答 1

8

您需要将压缩流上的流位置重置为零。您已将数据写入流中,但是当您从最后一行的流中上传时,流的位置位于您写入的数据的末尾,因此 blob.UploadFromStream 从当前位置开始流,后面什么都没有。

在执行上传之前添加以下内容:

compressed.Position = 0;

那应该上传流的全部内容。

这不一定是 Azure 的事情,大多数与流一起使用的代码都对流的当前位置进行操作。我已经被它烧了好几次了。

于 2013-07-28T22:48:51.833 回答