3

ユーザーが画像をアップロードするMVC Windows Azure Web サイトを作成中です。画像をブロブに保存したかったのです。チュートリアルを検索しましたが、それらのほとんどはMVC Web サイトではなく Webアプリケーションを扱っています。

私が見つけた唯一の役に立つチュートリアルは、http: //www.codeproject.com/Articles/490178/How-to-Use-Azure-Blob-Storage-with-Azure-Web-Sitesでした。

私は MVC/Windows Azure/Visual Studio シーン全体に不慣れで、クラウド ストレージ アカウントに接続する必要があるステップ 7 で混乱しました。

var storageAccount = CloudStorageAccount.Parse(
    ConfigurationManager.ConnectionStrings["StorageConnection"].ConnectionString);

そのコードをどこに置くべきかわかりません。

ステップ 8: コンテナーの作成のコードと同じ

blobStorage = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobStorage.GetContainerReference("productimages");
if (container.CreateIfNotExist())
{
    // configure container for public access
    var permissions = container.GetPermissions();
    permissions.PublicAccess = BlobContainerPublicAccessType.Container;
    container.SetPermissions(permissions);
}

ステップ 9: イメージを BLOB に保存する

string uniqueBlobName = string.Format("productimages/image_{0}{1}", 
   Guid.NewGuid().ToString(), Path.GetExtension(image.FileName));
CloudBlockBlob blob = blobStorage.GetBlockBlobReference(uniqueBlobName);
blob.Properties.ContentType = image.ContentType;
blob.UploadFromStream(image.InputStream);

どんな助けでも本当に感謝します。関連するチュートリアルへの他のリンクも歓迎します。

どうもありがとう!

4

2 に答える 2

2

Windows Azure Storage NuGet パッケージを Web アプリ プロジェクトに追加したと思いますか? あなたが引用した参考文献ではそれが明示されていないように見えましたが、そうでなければ、未解決のコンパイラ エラーがたくさん表示されることになります。

コードの行き先に関しては、むしろあなた次第です。への割り当てstorageAccountは、データベース接続文字列の設定に似ています。ネットワークを介して何も行われないため、おそらく一度設定して、静的クラス インスタンスの一部としてアプリケーション全体で使用できるようにすることができます。

コンテナーの作成に関して言えば、データを保存する必要があるときはいつでもこれを行います。これは、ファイル システムにフォルダーを作成することや、リレーショナル データベースにテーブルを作成することと同じだと考えてください。アプリケーションが常に同じ "ハードコードされた" コンテナーに情報を格納している場合は、コンテナーをコードで作成するのではなく、事前にポータルで設定することができます。

ただし、このようなコードを配置すると、コンテナーが何らかの外部プロセスによって削除された場合に備えて、多少の回復力が得られます。SQL Server を使用するアプリが、更新/取得を行う前に Employee テーブルの存在をチェックできるのと同じ方法です。これは、誰かが他の SQL ツールを介して Employee テーブルを削除した可能性があるためです (そうではありません)。

イメージをブロブに保存すると、そのアクションの開始を担当するコントローラーのすぐ後ろに配置されます。これは、「実際の」作業を行っている場所です。サンプルのコードは具体的には containerproductimagesを参照しているため、コンテナーが削除された可能性がないことを確認したい場合は (たとえば、ポータルを介して)、手順 8 のコードの直前に置くことができます。繰り返しますが、これは、従来のクライアント/サーバー コードでデータベース テーブル内のデータにアクセスするたびにそのテーブルの存在をチェックすることに似ています (ほとんどの人は、これはやり過ぎだと考えており、その不測の事態をカバーするために例外処理に頼っています)。

于 2013-02-16T16:51:14.173 に答える