Загрузить файл в корзину Amazon S3 - PullRequest
0 голосов
/ 03 мая 2018

Я знаю, что таких потоков много, я пробовал 100 примеров, все они выдают одно и то же исключение:

Указанный контейнер недействителен.

Я связался с администратором s3, он сказал, что все правильно с его стороны, и он сказал, что он установил полные разрешения, никаких отрицающих заявлений, поэтому мы можем проверить, но мое приложение по-прежнему выдает то же исключение, вот код ..

using Amazon;
using Amazon.S3;
using Amazon.S3.Transfer;

namespace AmazonS3
{
    public class FileUploader
    {
        private const string S3_Bucket_ARN = "(hidden)";
        private const string IAM_User_ARN = "(hidden)";
        private const string Access_Key_ID = "(hidden)";
        private const string Secret_access_Key = "(hidden)";

        public void UploadFile(string Filepath)
        {
            Program.WriteLine(MessageStatus.Neutral, "[1/4] Connecting to Amazon S3 . . .");
            using (IAmazonS3 client = new AmazonS3Client(Access_Key_ID, Secret_access_Key, RegionEndpoint.USEast1))
            {
                Program.WriteLine(MessageStatus.Neutral, "[2/4] Preparing upload request . . .");
                var uploadRequest = new TransferUtilityUploadRequest
                {
                    FilePath = Filepath,
                    BucketName = S3_Bucket_ARN,
                    CannedACL = S3CannedACL.PublicRead
                };

                Program.WriteLine(MessageStatus.Neutral, $"[3/4] Uploading file: \"{Filepath}\" . . .");
                var fileTransferUtility = new TransferUtility(client);
                fileTransferUtility.Upload(uploadRequest);

                Program.WriteLine(MessageStatus.Neutral, $"[4/4] File: \"{Filepath}\" successfully uploaded.");
            }
        }
    }
}

скрытые строки, конечно, заменены моими настоящими учетными данными, я только что их отредактировал. В любом случае, что здесь кажется неправильным? Я застрял на несколько дней, заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Проблема здесь:

BucketName = S3_Bucket_ARN

ARN: Имена ресурсов Amazon , которые представляют собой пространство имен для уникальной идентификации ресурсов Amazon ... но в этом случае BucketName ожидает только фактическое имя корзины, например, my-example-bucket.

Если вы используете ARN сегмента, вы передаете значение, которое выглядит как arn:aws:s3:::my-example-bucket, которое не только не является именем блока, но также содержит символы (:), которые недопустимы в именах блоков.

Справочник по S3 API указывает, что возможны две разные ошибки, когда имя сегмента неверно:

InvalidBucketName | The specified bucket is not valid.
NoSuchBucket      | The specified bucket does not exist.

Первый означает, что имя сегмента содержит недопустимые символы.

0 голосов
/ 03 мая 2018

Я недавно использовал метод ниже, это может помочь

        private string UploadAWS(Stream stream, string contentType, string name,string orgfileName,string lable)
    {
        string accessKey = "xxxxx";
        string secretKey = "xxxxxxx";

        using (client = new AmazonS3Client(accessKey, secretKey, Amazon.RegionEndpoint.USEast1))
        {
            return WritingAnObject(stream, contentType, name, orgfileName,lable);
        }
    }

    private string WritingAnObject(Stream stream, string contentType, string name,string orgfileName,string lable)
    {
        string rtn = string.Empty;

        try
        {
            string bucketName = "xxxxxxxx";

            PutObjectRequest putRequest2 = new PutObjectRequest
            {
                BucketName = bucketName,
                Key = name,
                ContentType = contentType,
                InputStream = stream
            };
            putRequest2.Metadata.Add("x-amz-meta-title", lable);
            putRequest2.Metadata.Add("x-amz-meta-original-file-name", orgfileName);

            PutObjectResponse response2 = client.PutObject(putRequest2);

        }
        catch (AmazonS3Exception amazonS3Exception)
        {
            if (amazonS3Exception.ErrorCode != null &&
                (amazonS3Exception.ErrorCode.Equals("InvalidAccessKeyId")
                ||
                amazonS3Exception.ErrorCode.Equals("InvalidSecurity")))
            {
                rtn="Check the provided AWS Credentials.";
            }
            else
            {
                rtn="Error occurred. Message:"+ amazonS3Exception.Message + " when writing an object";
            }
        }

        return rtn;

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