如何在 asp.net mvc 中显示来自 Amazon S3 的图像文件?

Posted

技术标签:

【中文标题】如何在 asp.net mvc 中显示来自 Amazon S3 的图像文件?【英文标题】:How can I show image file from Amazon S3 in asp.net mvc? 【发布时间】:2011-01-18 08:03:38 【问题描述】:

我需要使用控制器/动作在视图页面中显示图像(缩略图)。(例如:/Image/Thumbnail) 我可以通过调用控制器中的方法发送本地存储的图像文件。

// 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

谢谢

【问题讨论】:

【参考方案1】:

你可以返回一个重定向结果:

public ActionResult Thumbnail()

    return Redirect("http://domain.com/test.jpg");

如果 url 指向图像文件,那么它将起作用。当然,您不应该将此操作的 url 呈现给用户,而是在其他视图中将其用作 <img> src 属性值:

<img src="<%= Url.Action("Thumbnail", "ControllerName") %>" />

【讨论】:

-1 为图像请求返回重定向是一种不好的做法。您是在告诉客户提出 another 请求。周转时间增加。 @FreshCode - 很公平。你知道替代方案吗? @Sean,从 Amazon S3 拉取并缓存图像,然后在您的操作中返回 ImageResult(自定义类型)以显示图像。最好的解决方案当然是首先避免间接性,并教调用应用程序 S3 图像 URL。 正是我一直在寻找的......在这个解决方案之后 8 年......我错过了一个更好的解决方案吗?【参考方案2】:

尝试使用 WebClient 加载图像:

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

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

【讨论】:

如果您要通过传输图像来对带宽征税,这难道不会超出亚马逊托管的目的吗? 是的,但我想即时调整图像大小。【参考方案3】:

您可以发出网络请求以获取流

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");
    

【讨论】:

以上是关于如何在 asp.net mvc 中显示来自 Amazon S3 的图像文件?的主要内容,如果未能解决你的问题,请参考以下文章

来自数据库的数据不能显示在 ASP.NET MVC 的下拉列表中

403 禁止:Asp.net MVC

来自 Asp.net mvc 的大型 html 页面

如何在 ASP.Net MVC 应用程序中使用来自 WCF 身份验证服务的身份验证 cookie

如何使用 IIS 7.5 压缩来自 ASP.NET MVC 的 Json 结果

如何将项目列表从视图传递到控制器(ASP.NET MVC 4)