Можно ли в веб-приложении на C # .NET загрузить объект Amazon S3 непосредственно в память и использовать его в качестве изображения? - PullRequest
1 голос
/ 31 января 2012

Можно ли с помощью AWS .NET SDK загрузить объект S3 (файл изображения .jpg) непосредственно в память?Я уверен, что видел решение этой проблемы несколько месяцев назад, но не могу найти его сейчас.

Если я могу загрузить файл непосредственно в память, могу ли я затем передать изображение клиентуиспользуя

context.Response.Write(memoryStream object);

Спасибо за вашу помощь.Я знаю, что вы, вероятно, думаете, зачем вам это делать?Почему бы просто не дать ссылку на файл напрямую?Это сложная причина, я просто пытаюсь сделать это пока просто.Ура! * * 1006

1 Ответ

3 голосов
/ 31 января 2012

Вы, конечно, можете получить данные из другого источника и загрузить их в память, но вам нужно каким-то образом получить данные.

Скорее всего, это будет в форме веб-выборки. Вы можете очень легко получить данные, используя HttpWebRequest к URL-адресу объекта S3, прочитать данные в поток памяти и затем записать данные в поток ответов. Я бы порекомендовал вам пропустить шаг потока памяти и выполнить буферизованное чтение из вашего ответа S3 fetch и записать в ваш ASP.NET-ответ.

Есть предостережения в отношении этого подхода. Во-первых, вам придется решить проблему безопасности, если ваш объект S3 не является общедоступным. Во-вторых, ваш первоначальный запрос ASP.NET будет приостановлен, пока вы извлекаете эти данные, что увеличит задержку при передаче изображения в браузер, которую можно легко исправить, просто связав объект.

Например:

// Assuming url is the  url to the S3 object.
var buffer = new byte[1024*8]; // 8k buffer. 
var request = (HttpWebRequest)WebRequest.Create(url);
var response = request.GetResponse();
int bytesRead = 0;
using (var responseStream = response.GetResponseStream())
{
    while((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) != 0)
    {
         Response.OutputStream.Write(buffer, 0, bytesRead);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...