Вы, конечно, можете получить данные из другого источника и загрузить их в память, но вам нужно каким-то образом получить данные.
Скорее всего, это будет в форме веб-выборки. Вы можете очень легко получить данные, используя 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);
}
}