我正在尝试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);
}
}
答案 0 :(得分:6)
您需要在压缩流上将流位置重置为零。您已将数据写入流中,但是当您从最后一行的流上传时,流的位置位于您编写的数据的末尾,因此blob.UploadFromStream从当前位置开始流,后面什么都没有。
在执行上传之前添加以下内容:
compressed.Position = 0;
那应该上传流的全部内容。
这不一定是Azure的东西,大多数使用流的代码都会对流的当前位置进行操作。我被它烧了好几次。