AWS .NET PutObjectRequest 使用错误的主机

本文关键字:错误 主机 NET PutObjectRequest AWS | 更新日期: 2023-09-27 18:33:59

我正在使用适用于 Amazon Web Services 的 .NET 库来开发将图像上传到 Amazon S3 存储桶的应用程序。它用于 ASP.NET 4.5 应用程序的内部服务。NuGet 包名称为 AWSSDK,其版本是最新的(截至撰写本文时(稳定版:2.3.54.2

当我尝试在 PutObjectRequest 对象上使用 PutObject 方法(上传图像 blob(时,它会引发异常并抱怨主机名错误。

var accessKey = Config.GetValue("AWSAccessKey");
var secretKey = Config.GetValue("AWSSecretKey");
using (var client = new AmazonS3Client(accessKey, secretKey, config))
{
            var request = new PutObjectRequest();
            request.BucketName = Config.GetValue("PublicBucket");
            request.Key = newFileName;
            request.InputStream = resizedImage;
            request.AutoCloseStream = false;
            using (var uploadTaskResult = client.PutObject(request))
            {
                using (var uploadStream = uploadTaskResult.ResponseStream)
                {
                    uploadStream.Seek(0, SeekOrigin.Begin);
                    var resultStr = new StreamReader(uploadStream).ReadToEnd();
                }
            }
}

异常详情如下:

Fatal unhandled exception in Web API component: System.Net.WebException: The remote name could not be resolved: 'images.ourcompany.com.http'
   at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
   at System.Net.HttpWebRequest.GetRequestStream()
   at Amazon.S3.AmazonS3Client.getRequestStreamCallback[T](IAsyncResult result)
   at Amazon.S3.AmazonS3Client.endOperation[T](IAsyncResult result)
   at Amazon.S3.AmazonS3Client.EndPutObject(IAsyncResult asyncResult)
   at Tracks.Application.Services.Bp.BpTemplateService.UploadImage(Byte[] image, String fileName) in ...

我试图通过单步执行代码在 VS 中调试它,但 AWSSDK 没有附带调试符号。应该注意的是,远程主机名(或我认为亚马逊称之为存储桶名称(是 images.ourcompany.com(不是我们真正的公司名称!我已经检查了Config.GetValue("PublicBucket")的价值,它确实是 images.ourcompany.com。在这个阶段,我已经用尽了我对 Amazon S3 的有限知识,并且没有关于导致异常引发的原因的理论。

AWS .NET PutObjectRequest 使用错误的主机

我认为您必须添加区域终端节点或/并设置 ServiceUrl 以建立与 AmazonS3 的连接,请检查下面的类似问题:AmazonS3 存储桶中的应对文件夹 (c#(在亚马逊 S3 上上传图像。源代码

 AmazonS3Config cfg = new AmazonS3Config();  
    cfg.RegionEndpoint = Amazon.RegionEndpoint.SAEast1;//your region Endpoint
    string butcketName = "yourBucketName";
    AmazonS3Client s3Client = new AmazonS3Client("your access key",
     "your secret key", cfg);
     PutObjectRequest request = new PutObjectRequest()
                    {
                        BucketName = _bucket,
                        InputStream = stream,
                        Key = fullName
                    };
                    s3Client.PutObject(request);
or
    AmazonS3Config asConfig = new AmazonS3Config()
    {
        ServiceURL = "http://irisdb.s3-ap-southeast2.amazonaws.com/",
        RegionEndpoint = Amazon.RegionEndpoint.APSoutheast2
    };
相关文章: