/// <summary> /// 指定したコンテナとdirectory以下のBlob一覧とメタデータを取得する。 /// </summary> /// <param name="directory">ディレクトリ</param> /// <returns>ファイル一覧</returns> public IEnumerable <ArchiveFile> GetArchiveFiles(ArchiveDirectory directory) { _log.EnterJson("ArchiveDirectory: {0}", directory); Assert.IfNull(directory); CloudBlobContainer container = _collectingBlob.GetContainerReadOnly(directory.ContainerName ?? string.Empty); CloudBlobDirectory blobDirectory = container.GetDirectoryReference(directory.DirectoryPath); var blobs = new List <CloudBlockBlob>(); _polly.Execute( () => { var token = default(BlobContinuationToken); do { // Blob一覧を取得 BlobResultSegment segment = null; // 指定しない場合上限の5000件ずつ取得される segment = blobDirectory.ListBlobsSegmentedAsync(true, BlobListingDetails.Metadata, null, token, null, null).Result; token = segment.ContinuationToken; blobs.AddRange(segment.Results.OfType <CloudBlockBlob>()); }while (token != null); }); return(blobs.Select(blob => Blob.BlobToArchiveFile(blob))); }
/// <summary> /// コンストラクタ /// </summary> /// <param name="settings">AppSettings</param> /// <param name="primaryBlob">PrimaryBlob</param> /// <param name="polly">BlobPolly</param> /// <param name="logger">Logger</param> public PrimaryBlobRepository( AppSettings settings, PrimaryBlob primaryBlob, BlobPolly polly, ILogger <PrimaryBlobRepository> logger) { Assert.IfNull(settings); Assert.IfNull(primaryBlob); Assert.IfNull(logger); Assert.IfNull(polly); _settings = settings; _primaryBlob = primaryBlob; _polly = polly; _log = logger; }