LoginSignup
20
20

More than 5 years have passed since last update.

Azure Storage (blob)を使う

Last updated at Posted at 2016-11-26

.NET Coreで利用したかったのですが、2016年11月26日時点では依存ライブラリが微妙に対応してないとのことで、一旦、.NET Frameworkでのコードを書いておきます。実装は、

  • Blobへのアップロード、ダウンロード(既存ファイル操作)
  • Blobへの追記(新規作成+追記)

の2つを試してみたいと思います。

とりあえずC#のコンソールアプリからblobで操作します。

準備

VisualStudio 2015を利用する場合、NuGetで、WindowsAzure.Storageを追加する必要がります。

Blobへのアップロード・ダウンロード

特に難しい点はありません。

using System;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //storageAccountの作成(接続情報の定義)
            //アカウントネームやキー情報はAzureポータルから確認できる。
            var accountName = "teststorage";
            var accessKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
            var credential = new StorageCredentials(accountName, accessKey);
            var storageAccount = new CloudStorageAccount(credential, true);

            //こういう書き方もできるし、Configから読み込むこともできる。
            //CloudStorageAccount storageAccount = CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=アカウントネーム;AccountKey=アクセスキー");

            ////////////////// ここまでは各Storageサービス共通 //////////////////////////////////

            //blob
            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
            //container
            CloudBlobContainer container = blobClient.GetContainerReference("images");

            //もし無かったら作る
            //container.CreateIfNotExists();

            //upload

            //アップロード後のファイル名を指定(無くてよい)
            CloudBlockBlob blockBlob_upload = container.GetBlockBlobReference("aaa.jpg");

            //アップロード処理
            //アップロードしたいローカルのファイルを指定
            using (var fileStream = System.IO.File.OpenRead(@"C:\Users\hoge\Desktop\bbb.jpg"))
            {
                blockBlob_upload.UploadFromStream(fileStream);
            }

            //download

            //ダウンロードするファイル名を指定
            CloudBlockBlob blockBlob_download = container.GetBlockBlobReference("ccc.jpg");

            //ダウンロード処理
            //ダウンロード後のパスとファイル名を指定。
            blockBlob_download.DownloadToFile(@"C:\Users\hoge\Desktop\ddd.jpg", System.IO.FileMode.CreateNew);

            //削除
            //blockBlob_download.Delete();

            Console.WriteLine("処理を完了しました。");

            Console.ReadLine();
        }
    }
}

blobを始めとする各種ストレージへのアクセス方法はこちらが参考になります。

Blobへの追記

以前から「追記できたらログ管理とかで使えるのに」と思っていましたが2015年に追記に対応しました。
今更ながら試してみます。ここが参考になりました。
ログの恒久化が必要な実運用ではいろいろ使えそうです。

using System;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Auth;
using Microsoft.WindowsAzure.Storage.Blob;

namespace AppendTest
{
    class Program
    {
        static void Main(string[] args)
        {

            //アカウントネームやキー情報はAzureポータルから確認できる。
            var accountName = "teststorage";
            var accessKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
            var credential = new StorageCredentials(accountName, accessKey);
            var storageAccount = new CloudStorageAccount(credential, true);

            //ここまではstorage共通

            //blob
            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
            //container
            CloudBlobContainer container = blobClient.GetContainerReference("logs");

            //無かったら作る
            container.CreateIfNotExistsAsync();

            //ここまではblob共通

            //appendblob
            //BlockBlobではなくAppenDBlobのリファレンスを取得する
            CloudAppendBlob appendBlob = container.GetAppendBlobReference("server01.log");

            //無かったら作る
            if(!appendBlob.Exists()) appendBlob.CreateOrReplace();

            //書き込み
            appendBlob.AppendText(DateTime.Now+" Log message.\n");

            //内容表示
            Console.WriteLine(appendBlob.DownloadText());

            //待つ
            Console.ReadLine();

        }
    }
}
20
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
20