Как я могу показать файл изображения из Amazon S3 в asp.net mvc? - PullRequest
6 голосов
/ 18 февраля 2010

Мне нужно показать изображение (миниатюру) на странице просмотра, используя контроллер / действие. Я могу отправить файл изображения, который хранится локально, вызвав метод в контроллере.

// sample code
public FileResult Thumbnail()
{
    // get image
    Stream outFile = System.IO.File.Open("c:\\test.jpg", FileMode.Open);

    // send image
    return File(outFile, "image/jpeg");
}

Как отправить файл изображения, хранящийся в Amazon S3?

Могу ли я использовать Amazon S3 URL в указанном выше методе для возврата изображения? -> http://bucketname.s3.amazonaws.com/test.jpg?AWSAccessKeyId=AKIAIDLH65EJ6LSWERDF&Expires=1266497098&Signature=lopDEDErjNLy2uz6X6QCNlIjkpB0%3D

Спасибо

Ответы [ 3 ]

4 голосов
/ 18 февраля 2010

Вы можете вернуть результат перенаправления:

public ActionResult Thumbnail()
{
    return Redirect("http://domain.com/test.jpg");
}

Если URL-адрес указывает на файл изображения, он будет работать. Конечно, вы не должны представлять URL-адрес этого действия пользователю, а использовать его в другом представлении в качестве <img> значения атрибута src:

<img src="<%= Url.Action("Thumbnail", "ControllerName") %>" />
1 голос
/ 18 февраля 2010

вы можете сделать веб-запрос, чтобы получить поток

public FileResult Thumbnail()
    {
        // get image
        HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(@"http://bucketname.s3.amazonaws.com/test.jpg?AWSAccessKeyId=AKIAIDLH65EJ6LSWERDF&Expires=1266497098&Signature=lopDEDErjNLy2uz6X6QCNlIjkpB0%3D");
        WebResponse myResp = myReq.GetResponse();

        Stream outFile = myResp.GetResponseStream();

        // send image
        return File(outFile, "image/jpeg");
    }
1 голос
/ 18 февраля 2010

Попробуйте загрузить изображение с WebClient:

WebClient wClient = new WebClient();
Stream stream = new MemoryStream(wClient.DownloadData('http://....jpg'));

return File(stream, "image/jpg");
...