ダウンロード サンプルファイル (11.8 KB)
-
- Page 6
-
[7]FileInfoEntityクラスの作成
表5で定義したテーブルのエンティティを表すクラスを作成します。FileInfoEntityという名前で、TableServiceEntityの派生クラスとして作成します。
using System;
using Microsoft.WindowsAzure.StorageClient;
namespace WebRole1
{
public class FileInfoEntity : TableServiceEntity
{
public string Title { get; set; }
public string OriginalFileName { get; set; }
public string BlobUri { get; set; }
public DateTime UploadedAt { get; set; }
public FileInfoEntity(string userName, string blobName)
: base(userName, blobName) // *1
{ }
public FileInfoEntity() : base() { }
}
}
TableServiceEntityクラスはテーブルのエンティティを表すクラスで、PartitionKey、RowKey、Timestampの3つのシステム予約プロパティへのサポートがなされています。このTableServiceEntityクラスを派生して、独自のプロパティを追加することにより、エンティティを定義することができます。ここでは、4つのプロパティを追加しています。
コンストラクタで受け取る2つのパラメータは、PartitionKey(userName)とRowKey(blobName)を表しており、これを基底クラスであるTableServiceEntityクラスのコンストラクタに渡しています(*1)。
[8]参照設定に、System.Data.Services.Clientを追加する
WebRole1の参照設定に、System.Data.Services.Clientを追加します。
これは、Windows Azureストレージ・クライアントライブラリがテーブルの操作のために、ADO.NETデータサービス(ADO.NET Data Services)を使用するためです。
ソリューションエクスプローラから、WebRole1プロジェクト内の参照設定フォルダを右クリックして、[参照の追加]を選択します。表示された「参照の追加」ダイアログ中の「.NET」タブ中より、System.Data.Services.Clientを選択し、[OK]ボタンをクリックします。
[9]Default.aspx.csにコードを記述する
最後に、Default.aspx.csに、Windows Azureストレージにアクセスするコードを記述します。
Usingディレクティブとインスタンス変数
次のリスト5の太字部分にあるように、3つのUsingディレクティブと2つのインスタンス変数を追加します。
using System;
using System.Linq;
using System.Web;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.ServiceRuntime;
using Microsoft.WindowsAzure.StorageClient;
namespace WebRole1
{
public partial class _Default : System.Web.UI.Page
{
private CloudBlobClient blobClient; // ブロブクライアント
private CloudTableClient tableClient; // テーブルクライアント
// 以下、省略
}
}
Page_Loadイベントハンドラ
Page_Loadメソッドにコードを記述します。
protected void Page_Load(object sender, EventArgs e)
{
// ストレージアカウントの取得 *1
string connectionString = RoleEnvironment.GetConfigurationSettingValue("DataConnectionString");
var storageAccount = CloudStorageAccount.Parse(connectionString);
// ブロブクライアントの作成 *2
blobClient = storageAccount.CreateCloudBlobClient();
// テーブルクライアントの作成 *3
tableClient = storageAccount.CreateCloudTableClient();
if (!IsPostBack)
{
// コンテナの作成(存在しなければ) *4
var blobContainer = blobClient.GetContainerReference("uploadedfiles");
blobContainer.CreateIfNotExist();
// コンテナの公開アクセスの許可レベルを、ブロブに設定する *5
var permissions = blobContainer.GetPermissions();
permissions.PublicAccess = BlobContainerPublicAccessType.Blob;
blobContainer.SetPermissions(permissions);
// テーブルの作成(存在しなければ) *6
tableClient.CreateTableIfNotExist("uploadedfileinfo");
Refresh();
}
}
まず、各ストレージのルートとなるストレージクライアントを取得します(*1)。次に、ブロブとテーブルの各ストレージを操作するクライアントを取得します(*2、*3)。
次に、「uploadedfiles」という名前でコンテナを作成します。既に存在していれば、何も処理は行われません(*4)。そして、作成したコンテナの公開アクセスの許可レベルを設定します。ここでは、登録されたブロブに誰でもアクセスできるように、ブロブレベル(BlobContainerPublicAccessType.Blob)に設定します(*5)。
コンテナの公開アクセスの許可レベルを表す、BlobContainerPublicAccessType列挙体には、次の表6にあるように、3つのメンバが定義されています。
| アクセスレベル | 説明 |
|---|---|
| Blob | ブロブレベル公開アクセス。匿名ユーザーは、コンテナ内のブロブデータのみ読むことができる |
| Container | コンテナレベル公開アクセス。匿名ユーザーは、コンテナとブロブデータを読むことができる |
| Off | 未公開アクセス。ストレージアカウント所有者のみ、コンテナにアクセス可能 |
次に、「uploadedfileinfo」という名前でテーブルを作成します。既に存在していれば、何も処理は行われません(*6)
なお、ページがロードされる度に、コンテナやテーブルの作成コードが毎回実行されるというのは、当然ですが設計上好ましくありません。これはあくまでサンプルとお考えください。
この記事は参考になりましたか?
- 正式リリースされたWindows Azureの力連載記事一覧
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 広瀬 嘉久(株式会社ジェイテックジャパン)(ヒロセ ヨシヒサ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
