天蓝色blob存储使用gzip穿过电线

时间:2014-01-09 17:44:27

标签: azure blob

我想知道在将文件发送到Azure Blob存储之前是否有利于压缩文件 - 严格用于传输目的。换句话说,预先压缩文件会在进出blob存储时更快地进行文件传输吗?或者这是通过使用gzip在传输级别自动发生的吗?

2 个答案:

答案 0 :(得分:7)

截至2015年8月12日Azure blob存储(安装到CDN时)​​现在支持自动GZip压缩。

  

压缩方法 - 支持的压缩方法是   gzip / deflate / bzip2,必须在中设置支持的方法   接受编码请求标头。

Improve performance by compressing files

答案 1 :(得分:4)

<强>更新

我不确定我最初是做什么以及如何做到这一点,但我能想到的是我正在错误地查看结果。我能读到的关于azure的所有内容(从MSDN到代码本身)现在告诉我Azure不支持gzip用于传输目的。我不知道在什么情况下我能够得到以下结果,现在无法重现它们。不用说,我很失望。


(这个答案是不正确的,请看上面的更新)答案是否定的,在发送到blob存储之前将文件压缩为传输速度是没有好处的。通过启用Fiddler,您可以看到传输级别自动通过线路压缩内容。下面的屏幕截图确认了这一点:

content encoding from response headers tab content size difference

编辑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;
}