【问题标题】:"The connection with the server was terminated abnormally" when uploading to to S3 TransferUtility.UploadAsync on EC2 instance上传到 EC2 实例上的 S3 TransferUtility.UploadAsync 时“与服务器的连接异常终止”
【发布时间】:2018-08-13 11:07:51
【问题描述】:

我得到的错误是:

The thread 0xffc has exited with code 0 (0x0).
Exception thrown: 'System.IO.IOException' in System.Private.CoreLib.dll
Exception thrown: 'System.IO.IOException' in Anjuna1.dll
Exception thrown: 'System.IO.IOException' in System.Private.CoreLib.dll
Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware:Error: An unhandled exception has occurred: The write operation failed, see inner exception.

System.IO.IOException: The write operation failed, see inner exception. ---> 
System.Net.Http.WinHttpException: The connection with the server was 
terminated abnormally
   --- End of inner exception stack trace ---

完整的堆栈跟踪在这里:https://pastebin.com/BGny5ULG

代码(.net core 2)如下:

    private async Task S3UploadFileAsync(string fileName, Stream stream)
    {
        using (IAmazonS3 client = new AmazonS3Client(Amazon.RegionEndpoint.EUWest2))
        {
            var uploadRequest = new TransferUtilityUploadRequest
            {
                InputStream = stream,
                BucketName = "******-*****",
                CannedACL = S3CannedACL.AuthenticatedRead,
                Key = fileName
            };
            TransferUtility fileTransferUtility = new TransferUtility(client);
            try
            {

                await fileTransferUtility.UploadAsync(uploadRequest);
            }
            catch (System.Exception e)
            {
                throw e;
            }

        }
    }

上面的代码在我的本地机器(Windows 10)上运行良好,但在 EC2 实例(Windows Server 2016)上运行良好。

我尝试公开 S3 存储桶,认为这是权限问题(仍然无法正常工作)。

我认为这可能是 Windows 防火墙或 EC“实例安全组的问题,因此我安装了 AWS CLI 并可以使用它上传到 S3 实例而没有问题。

无论我上传什么,我都尝试过大文件、小文件甚至空文件。

在捕获异常之前大约需要 30 秒,所以感觉有些东西正在超时。将代码更改为不存在的 BucketName 会导致相同的症状,使我认为这与存储桶配置无关(我已将名称标出)。

如有任何关于尝试的建议的帮助,我们将不胜感激 - 我整天都在努力,但我的想法已经用完了......谢谢!

更新:这里的类似错误表明它与权限相关:https://matt40k.uk/2017/09/s3-errors/

【问题讨论】:

  • 更新部分拯救了我的一天:我得到了错误的密钥/秘密组合。谢谢,伙计!

标签: .net amazon-s3 aws-sdk asp.net-core-2.0 awss3transferutility


【解决方案1】:

我在尝试上传图片时遇到了同样的问题,我注释掉了以下行并且上传成功了:

CannedACL = S3CannedACL.PublicRead

在我的情况下,问题是存储桶本身的访问权限,它不允许公共对象。我更新了它以允许公共对象并且它有效。希望对您有所帮助。

【讨论】:

    【解决方案2】:

    我在使用 ASP.NET Core 2.0 应用程序将文件上传到 S3 时遇到了同样的问题,希望它对某人有所帮助。 在我的情况下,异常的原因是 AmazonS3Client 的构造函数中的区域参数不正确。

    var amazonS3Client = new AmazonS3Client(awsCredentials, Amazon.RegionEndpoint.USEast1);
    

    所以我同意问题作者的想法,即 AWS .NET SDK 没有提供格式正确的详细错误消息。

    【讨论】:

    • 绝对错误的错误信息。我的问题是错误的密钥/秘密参数,而不是区域......
    • 你是对的,我的地区是俄亥俄州,因此,我不得不使用 Amazon.RegionEndpoint.USEast2
    【解决方案3】:

    该问题似乎与 S3 存储桶的权限有关,如果我注释掉以下行,则上传有效:

    CannedACL = S3CannedACL.AuthenticatedRead,
    

    它仍然不完美,因为没有这条线,我的应用程序将无法下载它刚刚上传的文件 - 但至少我现在知道应该把精力集中在哪里!

    最终这看起来像是 AWS .NET SDK 的一个问题,因为它没有提供更好的错误消息。我在这里打开了一个问题:https://github.com/aws/aws-sdk-net/issues/890

    更新:最终通过将 AmazonS3FullAccess 策略添加到 aws-elasticbeanstalk-ec2-role 来修复底层权限问题,如以下评论中所建议:Grant S3 access to Elastic Beanstalk instances

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      • 2017-03-11
      • 2016-08-22
      • 2020-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多