Я использую ядро .net для загрузки и получения изображения из частного хранилища Amazon S3.
Я могу успешно загрузить его и даже просмотреть после загрузки с S3, однако, когда я немного не уверен в том, как вернуть поток / ответ обратно клиенту для реального APIвызов (например, сейчас я просто пытаюсь использовать прокси-инструменты Postman / Fiddler для получения изображения из моего API)
Мой код для S3 для получения потока:
///Retrieve my image from my bucket
public async Task<string> ReadObjectData(MediaFolder key, String fileName)
{
string responseBody = "";
IAmazonS3 client;
using (client = new AmazonS3Client(accessKey, accessSecret, endpoint))
{
Amazon.S3.Model.GetObjectRequest request = new Amazon.S3.Model.GetObjectRequest
{
BucketName = bucket,
Key = key + "/" + fileName,
};
using (GetObjectResponse response = await client.GetObjectAsync(request))
using (Stream responseStream = response.ResponseStream)
using (StreamReader reader = new StreamReader(responseStream))
{
string title = response.Metadata["x-amz-meta-title"];
responseBody = reader.ReadToEnd();
}
}
return responseBody;
}
Итак, теперь в моем контроллере у меня есть следующее действие:
[HttpGet("ProfilePic")]
public async Task<IActionResult> GetProfilePicture()
{
var user = await GetUserFromBearerToken();
//Retrieve
var utf8ImageResponse = await _fileService.ReadObjectData(MediaFolder.Profiles, user.ProfileImageFileName);
//To return a file as a stream
var imageBytes = System.Text.Encoding.UTF8.GetBytes(utf8ImageResponse);
//Return the image, which I'll hardcode as jpeg for a test
return File(imageBytes, "image/jpeg");
}
Когда я звоню с помощью Почтальона, он возвращает маленькое пустое поле (поле, которое вы увидите, если попытаетесь вернуть изображение, но это не было допустимым изображением или каким-либо образом пустым).
Сейчас я использую Почтальон, но в идеале я бы хотел, чтобы приложение представляло это изображение.
Любые идеичто я делаю не так?Я пытался возиться с кодировкой base64 и другими вещами, но, похоже, ничего не работает.
Спасибо!