Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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

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
C# 使用.Net AWSSDK在Amazon S3中删除文件时出现访问被拒绝异常_C#_Amazon S3 - Fatal编程技术网

C# 使用.Net AWSSDK在Amazon S3中删除文件时出现访问被拒绝异常

C# 使用.Net AWSSDK在Amazon S3中删除文件时出现访问被拒绝异常,c#,amazon-s3,C#,Amazon S3,我正在尝试使用AmazonS3和C#做一些简单的文件IO 到目前为止,我已经能够创建文件并列出它们。我是桶的主人,我应该有完全的权限。在CloudBerry中,我可以在bucket中创建和删除文件。在我的代码中,当我试图删除一个文件时,我得到一个访问被拒绝的异常 这是我的测试方法: [Test] public void TestThatFilesCanBeCreatedAndDeleted() { const string testFile = "test.txt"; var

我正在尝试使用AmazonS3和C#做一些简单的文件IO

到目前为止,我已经能够创建文件并列出它们。我是桶的主人,我应该有完全的权限。在CloudBerry中,我可以在bucket中创建和删除文件。在我的代码中,当我试图删除一个文件时,我得到一个访问被拒绝的异常

这是我的测试方法:

[Test]
public void TestThatFilesCanBeCreatedAndDeleted()
{
    const string testFile = "test.txt";

    var awsS3Helper = new AwsS3Helper();

    awsS3Helper.AddFileToBucketRoot(testFile);
    var testList = awsS3Helper.ListItemsInBucketRoot();
    Assert.True(testList.ContainsKey(testFile)); // This test passes
    awsS3Helper.DeleteFileFromBucket(testFile); // Access denied exception here
    testList = awsS3Helper.ListItemsInBucketRoot();
    Assert.False(testList.ContainsKey(testFile)); 

}
添加文件的我的方法:

var request = new PutObjectRequest();
        request.WithBucketName(bucketName);
        request.WithKey(fileName);
        request.WithContentBody("");
        S3Response response = client.PutObject(request);
        response.Dispose();
我删除文件的方法:

var request = new DeleteObjectRequest()
        {
            BucketName = bucketName,
            Key = fileKey
        };
        S3Response response = client.DeleteObject(request);
        response.Dispose();
运行代码后,该文件在CloudBerry中可见,我可以从那里删除它


我对AmazonS3没有什么经验,所以我不知道会出什么问题。我应该对我创建或上传的任何文件授予某种权限吗?为什么我可以在登录到CloudBerry时,使用程序提供的相同凭据删除文件?

我不确定问题的根源是什么。可能是安全规则,但可能是bucket配置的一些非常简单的东西。您可以使用AWS管理站点或任何其他管理工具检查它们。另外,我建议使用请求响应日志记录,这对我进行不同的调查有很大帮助。AWSSDK有很多很好的日志功能,所以你只需要复制粘贴它们,一切都可以正常工作。如果您有发送到Amazon的实际请求,您可以将它们与进行比较。请检查AccessKeyId以了解您的

我不确定问题的根源是什么。可能是安全规则,但可能是bucket配置的一些非常简单的东西。您可以使用AWS管理站点或任何其他管理工具检查它们。另外,我建议使用请求响应日志记录,这对我进行不同的调查有很大帮助。AWSSDK有很多很好的日志功能,所以你只需要复制粘贴它们,一切都可以正常工作。如果您有发送到Amazon的实际请求,您可以将它们与进行比较。请检查AccessKeyId以获取您的

谢谢您的回复。事实证明,我犯了一个新手错误,在构造函数中创建客户机并在整个helper类中使用它,从而导致了锁。我在每个方法中都使用了一个“using(clientCreatedInConstructor){}”块,但问题是通过每次创建客户机来解决的,即使用(Amazon.AWSClientFactory.CreateAmazonS3Client()){}。如果没有你的帮助,我要花更长的时间才能弄明白。谢谢,谢谢你的回复。事实证明,我犯了一个新手错误,在构造函数中创建客户机并在整个helper类中使用它,从而导致了锁。我在每个方法中都使用了一个“using(clientCreatedInConstructor){}”块,但问题是通过每次创建客户机来解决的,即使用(Amazon.AWSClientFactory.CreateAmazonS3Client()){}。如果没有你的帮助,我要花更长的时间才能弄明白。谢谢