Загрузить файл в корзину Amazon S3

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

The specified bucket is not valid.

Я связался с администратором 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.");
            }
        }
    }
}

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

Если все 100 примеров выдают одну и ту же ошибку, возможно, ваша корзина недействительна? Вы абсолютно уверены, что использовали правильные данные?

DavidG 03.05.2018 15:26

Да, это то, чему я учил в первый раз, но администратор s3 отправил мне эти учетные данные, даже после этого мы снова проверили, учетные данные верны: /

ShadyOverflow 03.05.2018 15:27

возможно, у вас есть опечатка в названии ведра

Daniel A. White 03.05.2018 15:28

Что-то не так с названием вашего ведра.

Saadi 03.05.2018 15:28

лучше создать новое ведро и попробовать :)

aas 03.05.2018 15:29

Может быть проблема с разрешением ведра. Вам необходимо предоставить разрешение AllowPublicRead.

Saadi 03.05.2018 15:33

Вы уверены, что ведро находится в нас-восток-1 (Северная Вирджиния)?

krishna_mee2004 03.05.2018 15:33

На самом деле я не знаю, где находится ведро, я знаю его только где-то в Америке, я в Европе.

ShadyOverflow 03.05.2018 15:43

Я готов поспорить, что проблема в BucketName = S3_Bucket_ARN ... BucketName ожидает название ведра, а не ARN. Использование здесь значения, которое выглядит как arn:aws:s3:..., определенно будет недопустимым.

Michael - sqlbot 03.05.2018 16:31

да, я использую значение, которое выглядит как arn: aws: s3: ... в качестве имени сегмента, я свяжусь с администратором прямо сейчас, чтобы попросить правильное имя.

ShadyOverflow 04.05.2018 15:01

Хорошо, проблема решена, проблема определенно была в названии корзины, она не должна начинаться с arn: aws: s3 .... точно так же, как сказал @ Michael-sqlbot, спасибо и спасибо всем за попытку помочь.

ShadyOverflow 07.05.2018 11:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
11
2 714
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

        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;

    }

Снова выдает то же исключение: / Но спасибо за помощь

ShadyOverflow 03.05.2018 15:51
Ответ принят как подходящий

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

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.

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

Другие вопросы по теме