Ich schreibe Code zum Hochladen von Dateien in AWS S3 und erhalte folgende Ausnahme:
AmazonClientException: Kein RegionEndpoint oder ServiceURL konfiguriert
Mein Code:
Console.WriteLine("ready to upload");
AWSCredentials credentials;
credentials = new BasicAWSCredentials(accessKeyID.Trim(), secretKey.Trim());
AmazonS3Client s3Client = new AmazonS3Client(accessKeyID.Trim(), secretKey.Trim(), Amazon.RegionEndpoint.USEast1);
Console.WriteLine("Successful verification");
Console.WriteLine("Check if the bucket exists");
if (!CheckBucketExists(s3Client, bucketName))
{
s3Client.PutBucket(bucketName);
Console.WriteLine("create bucket");
}
TransferUtility utility = new TransferUtility();
Console.WriteLine("Upload Directory......");
//exception here
utility.UploadDirectory(@"E:\telerikFile\13ginabdfglil.com", bucketName);
Die Ausnahme:
Amazon.Runtime.AmazonClientException: No RegionEndpoint or ServiceURL configured
Amazon.Runtime.ClientConfig.Validate()
Amazon.S3.AmazonS3Config.Validate()
Amazon.Runtime.AmazonServiceClient..ctor(AWSCredentials credentials, ClientConfig config)
Amazon.S3.AmazonS3Client..ctor()
Amazon.S3.Transfer.TransferUtility..ctor()
Telerik2Amazon.Program.UploadFile()
Was soll ich machen?
Die kurze Antwort auf Fehler ...
Amazon.Runtime.AmazonClientException: Kein RegionsEndpoint oder ServiceURL konfiguriert
... in meinem Fall war es, beim Erstellen des Client-Objekts eine Region anzugeben (für mich AmazonSimpleEmailServiceClient
).
Angenommen, Sie verwenden BasicAWSCredentials
, und versuchen Sie Folgendes:
var credentials = new BasicAWSCredentials(accessKeyID, secretKey);
new AmazonS3Client(credentials, RegionEndpoint.USEast1);
// ^^^^^^^^^^^^^^^^^^^^^^ add this
Meine Zugangsschlüssel-ID und mein geheimer Schlüssel können verwendet werden.
Deshalb gebe ich die Verwendung der TransferUtility-Klasse auf und wähle eine andere Klasse namens PutObjectRequest aus, um meine Dateien hochzuladen
Attention : PutObjectRequests Eigenschaft Key , Verzeichnisname und Dateiname müssen mit local files 'Verzeichnisname und Dateiname übereinstimmen.
Codes hier:
String s3Path = "987977/Baby.db";
Console.WriteLine("准备上传");
AWSCredentials credentials;
credentials = new BasicAWSCredentials(accessKeyID.Trim(), secretKey.Trim());
AmazonS3Client s3Client = new AmazonS3Client(accessKeyID.Trim(), secretKey.Trim(), Amazon.RegionEndpoint.USEast1);
Console.WriteLine("验证成功");
Console.WriteLine("检查存储桶是否存在");
if (!CheckBucketExists(s3Client, bucketName))
{
s3Client.PutBucket(bucketName);
Console.WriteLine("创建数据桶");
}
string localPath = @"E:\telerikFile\987977\Baby.db";
PutObjectRequest obj = new PutObjectRequest();
var fileStream = new FileStream(localPath, FileMode.Open, FileAccess.Read);
// obj.FilePath= @"E:\telerikFile\987977\Baby.db";
obj.InputStream = fileStream;
obj.BucketName = bucketName;
obj.Key = s3Path;
// obj.ContentBody = "This is sample content...";
obj.CannedACL = S3CannedACL.PublicRead;
Console.WriteLine("正在上传");
// 默认添加public权限
s3Client.PutObject(obj);
Zunächst sollten Sie aws-Anmeldeinformationen nicht hartcodieren.
Ich hatte einen ähnlichen Fehler. Es stellte sich heraus, dass es an Änderungen in .Net Core lag:
Eine der größten Änderungen in .NET Core ist das Entfernen von ConfigurationManager sowie der Standarddateien app.config und web.config
https://docs.aws.Amazon.com/sdk-for-net/v3/developer-guide/net-dg-config-netcore.html
Für eine schnelle und fehlerhafte Vorgehensweise können Sie eine Anmeldeinformationsprofildatei auf Ihrem Computer erstellen (siehe https://docs.aws.Amazon.com/sdk-for-Java/v1/developer-guide/setup-credentials.html =
z.B. C:\Users\<USERNAME>\.aws\credentials
unter Windows
[default]
aws_access_key_id = your_access_key_id
aws_secret_access_key = your_secret_access_key
dann können Sie in Ihrem Code einfach Folgendes tun:
var dbClient = new AmazonDynamoDBClient(new StoredProfileAWSCredentials(),
RegionEndpoint.USEast1);
Ein komplexerer Weg ist: https://docs.aws.Amazon.com/sdk-for-net/v3/developer-guide/net-dg-config-netcore.html#net-core-configuration- Baumeister
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
appsettings.Development.json
{
"AWS": {
"Profile": "local-test-profile",
"Region": "us-west-2"
}
}
var options = Configuration.GetAWSOptions();
IAmazonS3 client = options.CreateServiceClient<IAmazonS3>();
Wenn Sie TransferUtility()
verwenden, versuchen Sie Folgendes:
var credentials = new BasicAWSCredentials(accessKeyID, secretKey);
var S3Client = new AmazonS3Client(credentials, RegionEndpoint.USEast1);
this._transferUtility = new TransferUtility(S3Client);
In Asp.Net kann dieser Fehler behoben werden, indem diese Zeile zu Web.config hinzugefügt wird:
<add key="AWSRegion" value="us-east-1" />
Arbeitete für mich für AWSSDK.SimpleEmail v3.3