Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

Blobコンテンツを圧縮して送受信量を減らす

こんばんは、statemachineです。週一ペースを維持しようと思ったのですが、なかなかどうして厳しいですね。

今回は、Blobなどにアップロードする画像などを、予めGzipで圧縮しおいて、送受信量を節約しようというネタです。どこかで見たネタだとは思うのですが、自分で検証してみたかったので試してみました。検証大事です。

論よりコード。例によって、Windows 7 + LINQPadの検証コード。

  • チューリップ画像をメモリ上でGZip圧縮
  • tulips1.jpg/tulips2.jpg としてアップロード
  • tulips2.jpg のみ content-encoding には、"gzip" を設定
void Main()
{
    var tulips = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "Tulips.jpg");

    var m = new MemoryStream();
    var g = new GZipStream(m, CompressionMode.Compress);
    var r = File.OpenRead(tulips);
    r.CopyTo(g);
    r.Close();
    g.Close();
    
    var account = CloudStorageAccount.DevelopmentStorageAccount;
    var blobClient = account.CreateCloudBlobClient();
    var container = blobClient.GetContainerReference("pictures");
    container.CreateIfNotExist();

    var permission = container.GetPermissions();
    permission.PublicAccess = BlobContainerPublicAccessType.Container;
    container.SetPermissions(permission);
    
    var blob1 = container.GetBlobReference("tulips1.jpg");
    var blob2 = container.GetBlobReference("tulips2.jpg");
 
    blob1.UploadByteArray(m.ToArray());
    blob2.UploadByteArray(m.ToArray());
    
    blob2.Properties.ContentEncoding = "gzip";
    blob2.SetProperties();
    Console.WriteLine (blob1.Uri.AbsoluteUri);
    Console.WriteLine (blob2.Uri.AbsoluteUri);
    m.Close();    
}

content-encodingを指定していないtulips1.jpgをIEで開いてみます。
化け化けな感じで表示。

content-encodingを指定したtulips2.jpgをIEで開くと正常に表示されます。

FireFoxChromeとかはインストールしていないので、他ブラウザでの挙動は未確認です。