テスターですが何か?

ホビープログラマ略してHPです

【日本語訳】Exploring Windows Azure Storage part13

leave a comment »

このエントリーはMSDNのチュートリアル「Exploring Windows Azure Storage」の「Task5 – Copying Blobs」の日本語訳になります。このコンテンツ、日本語訳全体については、こちらのエントリーを参照してください。

 

Windows Azure Blob Service は Blob をコピーする機能をサポートしています。このエントリーでは、画像ギャラリーページに画像データを含んだ blob をコピーする機能を追加します。

 

1.gallery コンテナの画像をコピーする asp:LintButton コントロールを ListView に追加します。Default.aspx をマークアップ表示で開き、asp:ListView コントロールの ItemTemplate 部分へ移動します。blobRepeater コントロールのすぐ下にあるASP.NETのマークアップ(“copyBlob” の LinkButton)部分のコメントアウトを解除します。

            <ItemTemplate>            
                <div class="item">
                    <ul style="width:40em;float:left;clear:left" >
                        <asp:Repeater ID="blobMetadata" runat="server">
                        <ItemTemplate>
                            <li><%# Eval("Name") %><span><%# Eval("Value") %></span></li>
                        </ItemTemplate>
                        </asp:Repeater>
                        <li>
                            <asp:LinkButton ID="deleteBlob" 
                                    OnClientClick="return confirm('Delete image?');"
                                    CommandName="Delete" 
                                    CommandArgument='<%# Eval("Uri")%>'
                                    runat="server" Text="Delete" oncommand="OnDeleteImage" />                       

                            <asp:LinkButton ID="CopyBlob" 
                                    OnClientClick="return confirm('Copy image?');"
                                    CommandName="Copy" 
                                    CommandArgument='<%# Eval("Uri")%>'
                                    runat="server" Text="Copy" oncommand="OnCopyImage" />

                            (中略)
                        </li>
                    </ul>
                    <img src="&lt;%# Eval(" Uri") %>" alt="<%# Eval("Uri") %>" style="float:left"/>
                </div>
            </ItemTemplate>

2.Default.aspx.cs / Default.aspx.vb に asp:LinkButtonコントロール(copyBlob)のイベント処理を実装します。このコードは既存の Blob をもとに新しい Blob を作成しています。また、コピーされたものであることが分かるように imageName属性を変更しています。

(コードスニペット – ExploringWindowsAzureStorage-Ex02-10-OnCopyImageMethod-CS)

        protected void OnCopyImage(object sender, CommandEventArgs e)
        {
            if (e.CommandName == "Copy")
            {
                // コピーして作成したblob用のID
                var newID = Guid.NewGuid();

                // コピー元のblobを取得
                var blobUri = (string)e.CommandArgument;
                var srcBlob = this.GetContainer().GetBlobReference(blobUri);

                // 新しいblobを作成
                var newBlob = this.GetContainer().GetBlobReference(newID.ToString());
                // 元のblobからコンテンツをコピー
                newBlob.CopyFromBlob(srcBlob);
                // 新しいblob用のメタデータを明示的に取得
                newBlob.FetchAttributes(new BlobRequestOptions { BlobListingDetails = BlobListingDetails.Metadata });
                // UIからのコピーであることを新しいblobのメタデータに記録
                newBlob.Metadata["ImageName"] = "Copy of \"" + newBlob.Metadata["ImageName"] + "\"";
                newBlob.Metadata["Id"] = newID.ToString();
                newBlob.SetMetadata();

                // 全blobを再描画
                RefreshGallery();
            }
        }

(コードスニペット – ExploringWindowsAzureStorage-Ex02-10-OnCopyImageMethod-VB)

    Protected Sub OnCopyImage(ByVal sender As Object, ByVal e As CommandEventArgs)

        If e.CommandName = "Copy" Then

            ' コピーして作成したblob用のID
            Dim newID = Guid.NewGuid()

            ' コピー元のblobを取得
            Dim blobUri = DirectCast(e.CommandArgument, String)
            Dim srcBlob = Me.GetContainer.GetBlobReference(blobUri)

            ' 新しいblobを作成
            Dim newBlob = Me.GetContainer.GetBlobReference(newID.ToString())
            ' 元のblobからコンテンツをコピー
            newBlob.CopyFromBlob(srcBlob)
            ' 新しいblob用のメタデータを明示的に取得
            newBlob.FetchAttributes(New BlobRequestOptions)
            ' UIからのコピーであることを新しいblobのメタデータに記録
            newBlob.Metadata("ImageName") = "Copy of """ + newBlob.Metadata("ImageName") + """"
            newBlob.Metadata("Id") = newID.ToString()
            newBlob.SetMetadata()

            ' 全blobを再描画
             RefreshGallery()            }

        End If

    End Sub

3.F5キーを押下して、アプリケーションをビルド・実行します。

4.「Source\Assets\Images」フォルダにある画像をいくつかアップロードし、Copy をクリックして対応する画像がコピーされるか確認してみてください。

image

図21.ストレージにある blob をコピー

5.確認ダイアログで OK をクリックしてください。すると、ImageName メタデータでコピー作成されたことが分かる画像のコピーが作成されていることが分かります。

image

6.Shift+F5キーを押下し、を押下してデバッグを終了、Compute エミュレーター上に配置されたアプリケーションを削除します。

 

次は「Task6 – Taking Blob Snapshots」です。

Written by david9142

2011年12月18日 @ 12:22 PM

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。