Загрузите папку из корзины Amazon S3 с помощью .net SDK - PullRequest
0 голосов
/ 11 декабря 2018

Как загрузить всю папку, находящуюся внутри корзины s3, используя .net sdk. Попытка с использованием приведенного ниже кода выдает неверный ключ. Мне нужно загрузить все файлы, находящиеся во вложенной папке pesudo, находящейся внутри корзины, и снять ограничения на загрузку файлов до 1000, чтопо умолчанию.

public static void DownloadFile()
{
var client = new AmazonS3Client(keyId, keySecret, bucketRegion);
        ListObjectsV2Request request = new ListObjectsV2Request
        {
            BucketName = bucketName + "/private/TargetFolder",         
            MaxKeys = 1000
        };
        try
        {
            ListObjectsV2Response bucketResponse = client.ListObjectsV2(request);
            foreach (S3Object o in bucketResponse.S3Objects)
            {
                var getRequest = new GetObjectRequest
                {
                    BucketName = bucketResponse.Name + "/private/TargetFolder",
                    Key = bucketResponse.Name +"/private/TargetFolder/"+ o.Key
                };
                var response = client.GetObject(getRequest);
                response.WriteResponseStreamToFile(downloadLocation + "\\" + o.Key);
                var responseCode = response.HttpStatusCode;
                if (response.HttpStatusCode == System.Net.HttpStatusCode.OK)
                {
                    Console.WriteLine($"Success downloaded : {o.Key}");
                }
                else if (response.HttpStatusCode == System.Net.HttpStatusCode.RequestTimeout)
                {
                    Console.WriteLine("Request Timeout error.");
                }
                else if (response.HttpStatusCode == System.Net.HttpStatusCode.ServiceUnavailable)
                {
                    Console.WriteLine("Service Unavailable.");
                }
                else if (response.HttpStatusCode == System.Net.HttpStatusCode.InternalServerError)
                {
                    Console.WriteLine("Internal Server error.");
                }
                else
                {
                    Console.WriteLine("Please check the provided AWS Credentials.");
                }
            }
        }
        catch (AmazonS3Exception amazonS3Exception)
        {
            if (amazonS3Exception.ErrorCode != null &&
                (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId") || amazonS3Exception.ErrorCode.Equals("InvalidSecurity")))
            {
                Console.WriteLine("Please check the provided AWS Credentials.");
            }
            else
            {
                Console.WriteLine(amazonS3Exception.Message);
            }

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        Console.ReadLine();
    }

Заранее спасибо!

1 Ответ

0 голосов
/ 11 декабря 2018

Попробуйте, у меня все работает

public static void DownloadFile()
        {
            System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls | SecurityProtocolType.Tls;

            var client = new AmazonS3Client(keyId, keySecret, bucketRegion);
            ListObjectsRequest request = new ListObjectsRequest();

            request.BucketName = "BUCKET_NAME";
            request.Prefix = "/private/TargetFolder";
            request.Delimiter = "/";
            request.MaxKeys = 1000;

            ListObjectsResponse response = client.ListObjects(request);
            var x = response.S3Objects;

            foreach (var objt in x)
            {
                GetObjectRequest request1 = new GetObjectRequest();
                request1.BucketName = "BUCKET_NAME";
                request1.Key = objt.Key;

                GetObjectResponse Response = client.GetObject(request1);

                using (Stream responseStream = Response.ResponseStream)
                {
                    Response.WriteResponseStreamToFile(downloadLocation + "\\" + o.Key);
                }

            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...