こんばんわ、statemachineです。なんとか週一程度の更新は続けていきたいものですが、いかがお過ごしでしょうか。今回も、前回に引き続きShared Access Signatureの続きです。
前回は、どのような場面でSASを使うのかについて言及しませんでしたが、それは私が業務アプリ屋さんでなく、あんまり思い浮かばなかったからです。1つのケースとしては、Azure上で生成したファイルなどをBlobに格納し、一定期間アクセス権を与える、みたいな感じでしょうか。
さて前回はRead Onlyだったので、今回はSASでWriteしてみたいと思います。論よりコードということで、以下。
砂漠の画像をアップロードしたのち、30秒後にチューリップ画像に差し替えるサンプルです。ちょっとマッチポンプ気味なサンプルですが、前半は開発ストレージながらちゃんとしたアカウントを使ってUpload。後半は、SASを元にBlobClientを作成し、上書きUploadしてます。
他にも色々書き方があると思うのと、コンテナレベルでWrite権あたえられるのか否かは、ちょっと不明。
void Main() { // 開発ストレージアカウント var account = CloudStorageAccount.DevelopmentStorageAccount; // 画像 var tulips = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "Tulips.jpg"); var desert = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "Desert.jpg"); var blobClient = account.CreateCloudBlobClient(); var container = blobClient.GetContainerReference("pictures"); var blob = container.GetBlobReference("Desert.jpg"); blob.UploadFile(desert); // 砂漠の画像にWrite権を付与 var sas = blob.GetSharedAccessSignature(new SharedAccessPolicy() { Permissions=SharedAccessPermissions.Read | SharedAccessPermissions.Write , SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(5) }); Console.WriteLine (blob.Uri.AbsoluteUri + sas); Thread.Sleep(TimeSpan.FromSeconds(30)); //------------------------------------------------------------ // SASを使ってBlobクライアントを作成。 // 本環境の場合は、xxx.blob.core.windows.net とか指定する。 var sasCreds = new StorageCredentialsSharedAccessSignature(sas); var sasBlobClient = new CloudBlobClient("http://127.0.0.1:10000/devstoreaccount1", sasCreds); var sasBlob = sasBlobClient.GetBlobReference("pictures/Desert.jpg"); // 砂漠の画像をチューリップに更新 sasBlob.UploadFile(tulips); Console.WriteLine ("Done"); }
プログラムが終了後に、リロードするとチューリップ画像に入れ替わっているはずです。
では。