/******************************************************************************* * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"). You may not use * this file except in compliance with the License. A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. * ***************************************************************************** * __ _ _ ___ * ( )( \/\/ )/ __) * /__\ \ / \__ \ * (_)(_) \/\/ (___/ * * AWS SDK for .NET * API Version: 2006-03-01 * */ using System; using System.Collections.Generic; using System.IO; using System.Text; using Amazon.S3; using Amazon.S3.Model; namespace Amazon.S3.Transfer.Internal { internal partial class DownloadDirectoryCommand { public override void Execute() { ValidateRequest(); EnsureDirectoryExists(new DirectoryInfo(this._request.LocalDirectory)); ListObjectsRequest listRequest = ConstructListObjectRequest(); List objs = new List(); do { ListObjectsResponse listResponse = this._s3Client.ListObjects(listRequest); foreach (S3Object s3o in listResponse.S3Objects) { if (ShouldDownload(s3o)) { this._totalBytes += s3o.Size; objs.Add(s3o); } } listRequest.Marker = listResponse.NextMarker; } while (!string.IsNullOrEmpty(listRequest.Marker)); this._totalNumberOfFilesToDownload = objs.Count; foreach (S3Object s3o in objs) { if (s3o.Key.EndsWith("/", StringComparison.Ordinal)) continue; int prefixLength = listRequest.Prefix.Length; // If DisableSlashCorrection is enabled (i.e. S3Directory is a key prefix) and it doesn't end with '/' then we need the parent directory to properly construct download path. if (this._request.DisableSlashCorrection && !listRequest.Prefix.EndsWith("/")) { prefixLength = listRequest.Prefix.LastIndexOf("/") + 1; } this._currentFile = s3o.Key.Substring(prefixLength); var downloadRequest = ConstructTransferUtilityDownloadRequest(s3o, prefixLength); DownloadCommand command = new DownloadCommand(this._s3Client, downloadRequest); command.Execute(); } } } }