Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net &引用;与服务器的连接异常终止";在EC2实例上上载到S3 TransferUtility.UploadAsync时_.net_Amazon S3_Aws Sdk_Asp.net Core 2.0_Awss3transferutility - Fatal编程技术网

.net &引用;与服务器的连接异常终止";在EC2实例上上载到S3 TransferUtility.UploadAsync时

.net &引用;与服务器的连接异常终止";在EC2实例上上载到S3 TransferUtility.UploadAsync时,.net,amazon-s3,aws-sdk,asp.net-core-2.0,awss3transferutility,.net,Amazon S3,Aws Sdk,Asp.net Core 2.0,Awss3transferutility,我得到的错误是: 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.CoreL

我得到的错误是:

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 ---
在此处完成堆栈跟踪:

代码(.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会导致相同的症状,让我觉得这与bucket配置无关(我已经标出了名称)

任何关于尝试的建议的帮助都将不胜感激-我已经为此工作了一整天,我的想法已经没有了…谢谢


更新:这里的类似错误表明它与权限相关:

问题似乎与S3存储桶上的权限有关,如果我注释掉以下行,则上载工作正常:

CannedACL = S3CannedACL.AuthenticatedRead,
它仍然不是完美的,因为如果没有这一行,我的应用程序就无法下载刚刚上传的文件——但至少我现在知道该把精力放在哪里了

最终,这看起来像是AWS.NET SDK的一个问题,因为它没有提供更好的错误消息。我在这里提出了一个问题:


更新:通过将AmazonS3FullAccess策略添加到aws-elasticbeanstalk-ec2-role中,基本的权限问题最终得到了解决,正如这里的一条评论所建议的那样:

我在使用ASP.NET Core 2.0应用程序将文件上载到S3时遇到了相同的问题,希望这对其他人有所帮助。 在我的例子中,异常的原因是AmazonS3Client的构造函数中的区域参数不正确。

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

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

我在尝试上载图像时遇到了相同的问题,我注释掉了以下行,上载成功:

CannedACL = S3CannedACL.PublicRead

在我的例子中,问题是bucket本身的访问权限,它不允许使用公共对象。我将其更新为允许使用公共对象。希望能有所帮助。

更新部分挽救了我的一天:我获得了错误的密钥/密码组合。谢谢,伙计!错误消息肯定很糟糕。我的问题是错误的密钥/密码参数,而不是注册表ion…你是对的,我所在的地区是俄亥俄州,因此,我不得不使用Amazon.RegionEndpoint.USEast2