2010-02-18 61 views
5

我需要使用控制器/动作在视图页中显示图像(缩略图)(如:/ Image/Thumbnail) 我可以通过调用控制器中的方法发送本地存储的图像文件。如何在asp.net mvc中显示来自Amazon S3的图像文件?

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

可以返回重定向结果:

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

如果在图像文件的URL点那么它会工作。当然,你应该不存在这个动作给用户的URL,但使用它在其他一些视图<img> src属性值:

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

感谢所有人的回应:-) 此解决方案适用于我。 – user240181 2010-02-19 14:14:33

+0

-1返回图像请求的重定向是一种不好的做法。你要告诉客户做另一个*请求。周转时间增加。 – 2011-07-03 21:19:11

+0

@FreshCode - 够公平的。你知道另一个选择吗? – ctrlplusb 2012-10-09 19:14:50

1

尝试用Web客户端加载图像:

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

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

如果您要通过传输图像来为带宽征税,那么这是否会打破亚马逊托管的目的? – drake7707 2014-02-20 10:31:37

+0

是的,但我想随时调整图像大小。 – 2016-09-16 15:41:41

1

你可以使网络请求获得流

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

该死的,慢的方法:) – Pharabus 2010-02-18 13:54:05

相关问题