从亚马逊 s3 下载文件时出错
本文关键字:出错 文件 下载 亚马逊 s3 | 更新日期: 2023-09-27 17:56:01
>我正在尝试从 amazon s3 下载文件。我正在使用.NET sdk。我已经写下了以下代码:
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 response = s3Client.GetObject(request))后调用下载函数时运行列表文件方法后,我得到异常。
{"访问被拒绝"}
Stack trace:
at Amazon.S3.AmazonS3Client.processRequestError(String actionName, HttpWebRequest request, WebException we, HttpWebResponse errorResponse, String requestAddr, WebHeaderCollection& respHdrs, Type t, Exception& cause)
at Amazon.S3.AmazonS3Client.handleHttpWebErrorResponse(S3Request userRequest, WebException we, HttpWebRequest request, HttpWebResponse httpResponse, Exception& cause, HttpStatusCode& statusCode)
at Amazon.S3.AmazonS3Client.getResponseCallback[T](IAsyncResult result)
at Amazon.S3.AmazonS3Client.endOperation[T](IAsyncResult result)
at Amazon.S3.AmazonS3Client.EndGetObject(IAsyncResult asyncResult)
at Amazon.S3.AmazonS3Client.GetObject(GetObjectRequest request)
at ScreenshotsUploader.ScreenshotsUploader.downloadFile(AmazonS3 s3Client, NameValueCollection appConfig) in c:'Users'xyz'Documents'Visual Studio 2012'Projects'ScreenshotsUploader'ScreenshotsUploader'ScreenshotsUploader.cs:line 220
at ScreenshotsUploader.ScreenshotsUploader.GetServiceOutput() in c:'Users'xyz'Documents'Visual Studio 2012'Projects'ScreenshotsUploader'ScreenshotsUploader'ScreenshotsUploader.cs:line 55
状态代码:
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;
}
}
在函数中传递值 获取流路径 使用以下命令将其保存在文件夹中。
SaveStreamToFile(foldername + "/", MainStreamAwsPath);
然后,您可以应用简单的 C# 代码来下载该文件夹。