我想知道在将文件发送到Azure Blob存储之前是否有利于压缩文件 - 严格用于传输目的。换句话说,预先压缩文件会在进出blob存储时更快地进行文件传输吗?或者这是通过使用gzip在传输级别自动发生的吗?
答案 0 :(得分:7)
截至2015年8月12日Azure blob存储(安装到CDN时)现在支持自动GZip压缩。
压缩方法 - 支持的压缩方法是 gzip / deflate / bzip2,必须在中设置支持的方法 接受编码请求标头。
答案 1 :(得分:4)
<强>更新强>
我不确定我最初是做什么以及如何做到这一点,但我能想到的是我正在错误地查看结果。我能读到的关于azure的所有内容(从MSDN到代码本身)现在告诉我Azure不支持gzip用于传输目的。我不知道在什么情况下我能够得到以下结果,现在无法重现它们。不用说,我很失望。
(这个答案是不正确的,请看上面的更新)答案是否定的,在发送到blob存储之前将文件压缩为传输速度是没有好处的。通过启用Fiddler,您可以看到传输级别自动通过线路压缩内容。下面的屏幕截图确认了这一点:
编辑1 - Gaurav的快速澄清
代码中返回的字节数组长度为386803,但网卡只看到了23505个字节,因为它在响应中被Azure压缩了。我不需要为此做任何事情。
以下是我用于从Blob存储启动请求的代码
public Byte[] Read(string containerName, string filename)
{
CheckContainer(containerName);
Initialize();
// Retrieve reference to a previously created container.
CloudBlobContainer container = _blobClient.GetContainerReference(containerName);
// Retrieve reference to a blob named "photo1.jpg".
CloudBlockBlob blockBlob = container.GetBlockBlobReference(filename);
byte[] buffer;
// Save blob contents to a file.
using (var stream = new MemoryStream())
{
blockBlob.DownloadToStream(stream);
stream.Seek(0, SeekOrigin.Begin);
buffer = new byte[stream.Length];
stream.Read(buffer, 0, (int)stream.Length);
}
return buffer;
}