Я знаю, что таких потоков много, я пробовал около 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.");
}
}
}
}
скрытые строки, конечно, заменены моими настоящими учетными данными, я только что отредактировал их сейчас. В любом случае, что здесь кажется неправильным? Я застрял на несколько дней, заранее спасибо.
Да, это то, чему я учил в первый раз, но администратор s3 отправил мне эти учетные данные, даже после этого мы снова проверили, учетные данные верны: /
возможно, у вас есть опечатка в названии ведра
Что-то не так с названием вашего ведра.
лучше создать новое ведро и попробовать :)
Может быть проблема с разрешением ведра. Вам необходимо предоставить разрешение AllowPublicRead.
Вы уверены, что ведро находится в нас-восток-1 (Северная Вирджиния)?
На самом деле я не знаю, где находится ведро, я знаю его только где-то в Америке, я в Европе.
Я готов поспорить, что проблема в BucketName = S3_Bucket_ARN ... BucketName ожидает название ведра, а не ARN. Использование здесь значения, которое выглядит как arn:aws:s3:..., определенно будет недопустимым.
да, я использую значение, которое выглядит как arn: aws: s3: ... в качестве имени сегмента, я свяжусь с администратором прямо сейчас, чтобы попросить правильное имя.
Хорошо, проблема решена, проблема определенно была в названии корзины, она не должна начинаться с arn: aws: s3 .... точно так же, как сказал @ Michael-sqlbot, спасибо и спасибо всем за попытку помочь.





Я недавно использовал метод ниже, это может помочь
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;
}
Снова выдает то же исключение: / Но спасибо за помощь
Проблема здесь:
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.
Первый означает, что имя сегмента содержит недопустимые символы.
Если все 100 примеров выдают одну и ту же ошибку, возможно, ваша корзина недействительна? Вы абсолютно уверены, что использовали правильные данные?