Windows Azure Media Services: API無しのバルク転送ツールとの連動: C#編

現在、Windows Azure Media ServicesのBuild-in Partnerとして、以下のファイル高速転送ツールがあります。

  • Aspera
  • UNIXON STORM (執筆時点では、発表のみでまだ公開されていません)

その他にも世間には以下もあります。

  • Signiant

これらのツールでは、画面から簡単に操作が出来るため、全部自動化する必要はないかもしれません。それを受け付ける側のサンプルコードとなります。

  • エラーハンドルは別途お願いします
  • 特定ディレクトリーのファイルを全部アップロードする
  • アップロード自体は別のツールを使う
  • 監視前にデスクトップにアップロードをすべきフォルダ (Blobのコンテナ)名をファイル出力

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading;

using System.Threading.Tasks;

using System.IO;

using Microsoft.WindowsAzure.MediaServices.Client;

namespace BulkIngest

{

    class Program

    {

        static void Main(string[] args)

        {

#region Configuration

            // アップロード対象ファイルが格納されいているディレクトリ

            DirectoryInfo ingestDirectory = new DirectoryInfo(@”C:\UploadContents”);

            StringBuilder buffer = new StringBuilder(1024);

#endregion

            // 0. Windows Azure Media Services 接続

            var context = new CloudMediaContext(“<Account Name>”“<Account Key>”);

            // 1. IngestManifest 作成

            var manifest = context.IngestManifests.Create(ingestDirectory.Name);

            buffer.AppendLine(“manifest id :{0}” + manifest.Id);

            buffer.AppendLine(“manifest BlobStorageUriForUpload: {0}” + manifest.BlobStorageUriForUpload);

            // 2. Asset 作成

            // 3. IngestManifestAsset 作成

            foreach (var item in ingestDirectory.EnumerateFiles())

            {

                var asset = context.Assets.Create( item.Name, AssetCreationOptions.None);

                manifest.IngestManifestAssets.Create(asset, new string[] {item.FullName});

                buffer.AppendLine(“File : {0}” + item.Name);

                buffer.AppendLine(“Asset id :{0}” + asset.Id);

            }

            // IngestManifestID, AssetID 出力

            WriteToFile(Environment.GetEnvironmentVariable(“USERPROFILE”)

                    + @”\Desktop\manifest.txt”,

                    buffer.ToString());


            Console.WriteLine(“** IngestManifest作成完了: ID {0}”, manifest.Id);

            Console.WriteLine(”   BlobStorageUriForUpload: {0}”, manifest.BlobStorageUriForUpload);

            Console.WriteLine(“** 別ツールでのファイルの転送を開始してください。ファイル転送状況を監視します。[Enter]キーを押してください);

            Console.ReadLine();

            /// 4. マニフェスト監視

            bool isFinished = true;

            while (isFinished)

            {

                manifest = context.IngestManifests.Where(m => m.Id == manifest.Id).FirstOrDefault();

                Console.WriteLine(“** ファイル転送監視中 – {0}”, DateTime.Now.ToLongTimeString());

                Console.WriteLine(”  PendingFilesCount  : {0}”, manifest.Statistics.PendingFilesCount);

                Console.WriteLine(”  FinishedFilesCount : {0}”, manifest.Statistics.FinishedFilesCount);

                Console.WriteLine(”  {0}% complete.\n”, (float)manifest.Statistics.FinishedFilesCount / (float)(manifest.Statistics.FinishedFilesCount + manifest.Statistics.PendingFilesCount) * 100);

                if (manifest.Statistics.PendingFilesCount == 0)

                {

                    Console.WriteLine(ファイル転送完全完了!”);

                    isFinished = false;

                    break;

                }

                if (manifest.Statistics.FinishedFilesCount < manifest.Statistics.PendingFilesCount)

                    Console.WriteLine(“10秒待機します。);

                    Thread.Sleep(10000);

            }

            Console.WriteLine(全ての処理が終了しました。);

            Console.WriteLine(“Enter キーを押してください);

            Console.ReadLine();

        }

        private static void WriteToFile(string outFilePath, string fileContent)

        {

            StreamWriter sr = File.CreateText(outFilePath);

            sr.Write(fileContent);

            sr.Close();

        }

    }

}

広告

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中