3

我得到的错误是:

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/

4

3 回答 3

2

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

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

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

于 2018-05-17T04:40:31.253 回答
1

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

CannedACL = S3CannedACL.AuthenticatedRead,

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

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

更新:最终通过将 AmazonS3FullAccess 策略添加到 aws-elasticbeanstalk-ec2-role 来修复底层权限问题,如此处评论中所建议:授予 S3 访问 Elastic Beanstalk 实例

于 2018-03-05T19:44:12.283 回答
0

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

CannedACL = S3CannedACL.PublicRead

就我而言,问题是存储桶本身的访问权限,它不允许公共对象。我更新了它以允许公共对象并且它有效。希望能帮助到你。

于 2018-11-23T05:23:57.847 回答