/// <summary> S3内の全ファイル削除 </summary> private async Task DeleteAllPackageFromS3(S3Object[] s3Objects) { // 削除. var deleteTargets = s3Objects.Select(x => x.Key).ToArray(); if (deleteTargets.Any()) { Debug.LogFormat("Delete s3 {0} all objects.", bucketFolder); await s3Client.DeleteObjects(deleteTargets); } // ログ. if (deleteTargets.Any()) { Action <int, int, string[]> logOutput = (index, num, targets) => { var builder = new StringBuilder(); targets.ForEach(x => builder.AppendLine(x)); Debug.LogFormat("Delete S3 objects. [{0}/{1}]\n{2}", index, num, builder.ToString()); }; ChunkAction(deleteTargets, logOutput); } }
/// <summary> 削除対象のファイルをS3から削除 </summary> private async Task DeleteDeletedPackageFromS3(FileInfo[] fileInfos, S3FileInfo[] s3FileInfos) { var deleteTargets = new List <S3FileInfo>(); foreach (var s3FileInfo in s3FileInfos) { var fileInfo = fileInfos.FirstOrDefault(x => x.ObjectPath == s3FileInfo.ObjectPath); if (fileInfo != null) { if (fileInfo.Hash == s3FileInfo.Hash) { continue; } } deleteTargets.Add(s3FileInfo); } // 削除. var deleteObjectPaths = deleteTargets.Select(x => x.ObjectPath).ToArray(); if (deleteObjectPaths.Any()) { Debug.LogFormat("Delete deleted {0} objects from s3 {1}.", bucketFolder, deleteObjectPaths.Length); await s3Client.DeleteObjects(deleteObjectPaths); } // ログ. if (deleteObjectPaths.Any()) { var chunk = deleteTargets.Chunk(100).ToArray(); var num = chunk.Length; for (var i = 0; i < num; i++) { var builder = new StringBuilder(); chunk[i].ForEach(x => builder.AppendLine(x.ObjectPath)); Debug.LogFormat("Delete S3 objects. [{0}/{1}]\n{2}", i + 1, num, builder.ToString()); } } }