Загрузка .NET в AWS S3 - PullRequest
       9

Загрузка .NET в AWS S3

0 голосов
/ 25 октября 2019

Я пытаюсь создать dll, который другой сервис будет использовать для загрузки PDF в S3 Bucket. Я пробовал различные решения, в основном скопированные из документации AWS, или другие ответы, и оба следующие выглядят так, как будто они работают в тестировании, но ничего не загружается в корзину s3.

Попытка 1: асинхронная работаupload

using Amazon.S3;
using Amazon.S3.Transfer;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    public class UploadFileMPUHighLevelAPITest
    {
        private const string bucketName = "some-demo";
        private const string keyName = "some-key";
        private const string filePath = @"C:\Users\ME\Documents\sample.pdf";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.EUWest3;
        private static IAmazonS3 s3Client;

        public static void Main()
        {
            s3Client = new AmazonS3Client("*AccessKey*", "*SecretKey*", bucketRegion);
            UploadFileAsync().Wait();
        }

        private static async Task UploadFileAsync()
        {
            try
            {
                var fileTransferUtility =
                    new TransferUtility(s3Client);

                // Option 1. Upload a file. The file name is used as the object key name.
                await fileTransferUtility.UploadAsync(filePath, bucketName);
                Console.WriteLine("Upload 1 completed");

                // Option 2. Specify object key name explicitly.
                await fileTransferUtility.UploadAsync(filePath, bucketName, keyName);
                Console.WriteLine("Upload 2 completed");


                // Option 4. Specify advanced settings.
                var fileTransferUtilityRequest = new TransferUtilityUploadRequest
                {
                    BucketName = bucketName,
                    FilePath = filePath,
                    StorageClass = S3StorageClass.StandardInfrequentAccess,
                    PartSize = 6291456, // 6 MB.
                    Key = keyName
                };
                fileTransferUtilityRequest.Metadata.Add("param1", "Value1");
                fileTransferUtilityRequest.Metadata.Add("param2", "Value2");

                await fileTransferUtility.UploadAsync(fileTransferUtilityRequest);
                Console.WriteLine("Upload 4 completed");
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }

        }
    }
}

Затем я создал консольное приложение для запуска описанного выше:

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Amazon.DocSamples.S3.UploadFileMPUHighLevelAPITest.Main();
        }
    }
}

В результате этого были напечатаны операторы журнала, и приложение завершилось без выброса. Но ничего в моем ведре!

Попытка 2: синхронный подход

using System;
using System.Diagnostics;
using Amazon.S3;
using Amazon.S3.Model;

namespace AmazonS3Demo
{
    public class AmazonS3Uploader
    {
        private string bucketName = "some-demo";
        private string keyName = "the-name-of-your-file";
        private string filePath = "C:\\Users\\ME\\Documents\\sample.pdf"; 

        public void UploadFile(string AWSAccessKey, string AWSSecretKey)
        {
            var client = new AmazonS3Client(AWSAccessKey, AWSSecretKey, Amazon.RegionEndpoint.EUWest1);

            try
            {
                PutObjectRequest putRequest = new PutObjectRequest
                {
                    BucketName = bucketName,
                    Key = keyName,
                    FilePath = filePath,
                    ContentType = "application/pdf"
                };

                PutObjectResponse response = client.PutObject(putRequest);

                Debug.WriteLine(response.HttpStatusCode);
            }
            catch (AmazonS3Exception amazonS3Exception)
            {
                if (amazonS3Exception.ErrorCode != null &&
                (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId")
                ||
                amazonS3Exception.ErrorCode.Equals("InvalidSecurity")))
                {
                    throw new Exception("Check the provided AWS Credentials.");
                }
                else
                {
                    throw new Exception("Error occurred: " + amazonS3Exception.Message);
                }
            }
        }
    }
}

Опять же, было создано консольное приложение для проверки этого:

using System;
using AmazonS3Demo;

namespace DemoExe
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                AmazonS3Uploader s3 = new AmazonS3Uploader();

                string AWSAccessKey = "*AccessKey*";
                string AWSSecretKey = "*SecretKey";

                s3.UploadFile(AWSAccessKey, AWSSecretKey);
            }
            catch (Exception e)
            {
                Console.WriteLine(
                        "Error encountered ***. Message:'{0}' when writing an object"
                        , e.Message);
            }
        }
    }
}

Почти так же, какв последний раз приложение регистрирует сообщение «ОК», а затем завершает работу. Но нет файла в моем ведре S3!

Может кто-нибудь указать мне правильное направление, пожалуйста?

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