C# 从amazon s3下载文件时出错

C# 从amazon s3下载文件时出错,c#,.net,amazon-web-services,amazon-s3,C#,.net,Amazon Web Services,Amazon S3,我正在尝试从AmazonS3下载文件。我使用的是.NETSDK。我写下了以下代码: GetObjectRequest request = new GetObjectRequest() .WithKey("abc/xyz.jpg") .WithBucketName(appConfig); using (GetObjectResponse response = s3Client.GetObject(request)) { int numBytesToRead = (int)

我正在尝试从AmazonS3下载文件。我使用的是.NETSDK。我写下了以下代码:

GetObjectRequest request = new GetObjectRequest()
    .WithKey("abc/xyz.jpg")
    .WithBucketName(appConfig);

using (GetObjectResponse response = s3Client.GetObject(request))
{
    int numBytesToRead = (int)response.ContentLength;
    if (numBytesToRead > 0)
    {
        int numBytesRead = 0;
        byte[] buffer = new byte32768;
        using (FileStream fstream = new FileStream(@"C:\abc\xyz.jpg", FileMode.Create))
        {
            using (Stream responseStream = response.ResponseStream)
            {
                do
                {
                    numBytesRead = responseStream.Read(buffer, 0, buffer.Length);
                    fstream.Write(buffer, 0, numBytesRead);
                }
                while (numBytesRead > 0);
            }
        }
    }
}
有了这段代码,我就可以下载这个文件了。但现在我想下载多个文件。首先,我列出s3上可用的所有文件,然后将其存储在arraylist中,然后调用每个文件的下载函数

在使用(GetObjectResponse=s3Client.GetObject(request))调用下载函数时运行list file方法后,我得到异常

{“拒绝访问”}

状态代码:

System.Net.HttpStatusCode.Forbidden

我需要做什么来解决这个问题

我还尝试了不同的方法下载文件,但得到了相同的错误:

第二种方法:

string fileToDownload = @"xyzjpg";
string saveToo = @"C:\xyz.jpg";
TransferUtilityDownloadRequest request = new TransferUtilityDownloadRequest().WithBucketName(appConfig).WithKey(fileToDownload).WithFilePath(saveToo);
TransferUtility tu = new TransferUtility(s3Client);
tu.Download(request);
提前谢谢

public Stream DownloadS3Object(string awsBucketName, string keyName)
{

    using (var client = Amazon.AWSClientFactory.CreateAmazonS3Client())
    {
        Stream imageStream = new MemoryStream();
        GetObjectRequest request = new GetObjectRequest { BucketName = awsBucketName, Key = keyName };
        using (GetObjectResponse response = client.GetObject(request))
        {
            response.ResponseStream.CopyTo(imageStream);
        }
        imageStream.Position = 0;
        // Clean up temporary file.
        // System.IO.File.Delete(dest);
        return imageStream;
    }
}
在函数get stream path中传递值,并使用下面的命令将其保存在文件夹中

SaveStreamToFile(foldername + "/", MainStreamAwsPath);

然后你可以用简单的c代码来下载这个文件夹。

你能把你的bucket策略包括进去吗?您的IAM对存储桶具有何种权限?这看起来可能是权限问题。如果没有,你能发布你的实际代码吗?我只看到文件名、对象键等的字符串文字。我没有更改(添加/编辑)权限和策略中的任何内容。我刚刚创建了bucket并将文件上传到bucket。在这两种方法中,我都可以下载文件(单个文件)。是否有其他方法可以下载所有文件?在实例化S3Client时指定aws凭据。可能是重用该对象造成了此问题。如果在每次迭代中(在遍历arraylist时)创建一个新的S3Client并将其传递给单个文件下载函数,您是否可以尝试看看会发生什么。
SaveStreamToFile(foldername + "/", MainStreamAwsPath);