Как загрузить список файлов из AWS S3 с C # / .Net на мое устройство?
Я хочу загрузить несколько изображений, хранящихся в S3. Но пока было бы достаточно, если бы я мог скачать только одну. У меня есть информация о путях объектов. Код в документации AWS для .Net не включает соединение с ключом. Я объединил его с кодом из другого решения в Интернете, но результат не работает. Похоже, что в основном мне нужно создать AmazonS3Client на основе моих ключей и конфигурации доступа для подключения к серверу, а затем создать путь к хранилищу моего объекта на основе запроса, а затем каким-то образом прочитать данные и сохранить их на моем устройстве. Между прочим, в нашем AWS S3 у нас есть « роли », что означает, что моему пользователю в AWS недостаточно для доступа к этому объекту, я также должен изменить роль на ту, которая имеет доступ к этим изображениям после входа в систему.
Буду благодарен, если вы напишете в посте свои ответы, а не комментарии. Я дам тебе голос.
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.IO;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.IO.Compression;
namespace DownloadFromS3
{
class GetObjectTest
{
private const string bucketName = "My_bucket";
private const string keyName = "12/15345/3543.jpg";
// private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
private static IAmazonS3 client;
static string regionName = "USWest2";
static string accessKey = "My_Access_Key";
static string secretKey = "My_secretKey";
static string extractToFolder = "C:\\Users\\me\\test";
public static void Main()
{
AmazonS3Config config = new AmazonS3Config();
config.RegionEndpoint = RegionEndpoint.GetBySystemName(regionName);
AmazonS3Client s3Client = new AmazonS3Client(accessKey, secretKey, config);
ReadObjectDataAsync().Wait();
}
static async Task ReadObjectDataAsync()
{
string responseBody = "";
GetObjectRequest request = new GetObjectRequest
{
BucketName = bucketName,
Key = keyName
};
using (GetObjectResponse response = await client.GetObjectAsync(request))
using (Stream responseStream = response.ResponseStream)
using (StreamReader reader = new StreamReader(responseStream))
{
string title = response.Metadata["amazon-title"];
string contentType = response.Headers["jpg"];
Console.WriteLine("Object metadata, Title: {0}", title);
Console.WriteLine("Content type: {0}", contentType);
responseBody = reader.ReadToEnd();
string tmpfilename = System.IO.Path.GetTempFileName();
File.ExtractToDirectory(tmpfilename, extractToFolder);
}
}
}
}
Документация AWS для загрузки объекта:https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html
1 ответ
Я немного изменил ваш код и смог успешно выполнить запрос GetObjectAsync.
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.IO;
using System.Threading.Tasks;
namespace DownloadFromS3
{
class GetObjectTest
{
private static IAmazonS3 client;
private const string regionName = "us-west-2";
private const string accessKey = "accessKey";
private const string secretKey = "secretKey";
private const string bucketName = "bucketName";
private const string keyName = "folder/keyName.jpg";
public static void Main(string[] args)
{
client = new AmazonS3Client(accessKey, secretKey, RegionEndpoint.GetBySystemName(regionName));
ReadObjectDataAsync().Wait();
}
static async Task ReadObjectDataAsync()
{
var request = new GetObjectRequest()
{
BucketName = bucketName,
Key = keyName
};
using (var response = await client.GetObjectAsync(request))
{
using (var reader = new StreamReader(response.ResponseStream))
{
var title = response.Metadata["amazon-title"];
var contentType = response.Headers["jpg"];
Console.WriteLine("Object metadata, Title: {0}", title);
Console.WriteLine("Content type: {0}", contentType);
var responseData = reader.ReadToEnd();
}
}
}
}
}
Код более-менее такой же. Я подозреваю
- в
regionName
используемое значение Код региона AWS - Используемые учетные данные AWS не имеют достаточных разрешений для чтения данных из S3