.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();
}
}
}