예제 #1
0
        /// <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);
            }
        }
예제 #2
0
        /// <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());
                }
            }
        }