こんばんは、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で開いてみます。
化け化けな感じで表示。