2010-02-18 6 views
5

Ich muss Bild (Miniaturansicht) in Ansichtsseite mit Controller/Aktion anzeigen (wie:/Bild/Thumbnail) Ich kann Bilddatei senden, die lokal gespeichert wird, indem Sie die Methode in Controller aufrufen.Wie kann ich Bilddatei von Amazon S3 in asp.net mvc anzeigen?

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

Wie kann ich Bilddatei senden, die in Amazon S3 gespeichert?

Kann ich Amazon S3 URL in der oben genannten Methode verwenden, um ein Bild zurück zu geben? -> http://bucketname.s3.amazonaws.com/test.jpg?AWSAccessKeyId=AKIAIDLH65EJ6LSWERDF&Expires=1266497098&Signature=lopDEDErjNLy2uz6X6QCNlIjkpB0%3D

Dank

Antwort

3

Sie können eine Umleitung Ergebnis zurück:

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

Wenn die URL zeigt auf die Image-Datei dann wird es funktionieren. Natürlich sollten Sie die URL dieser Aktion Benutzer nicht aber in einer anderen Ansicht als <img> src Attributwert verwenden:

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

Vielen Dank an alle für die Antwort :-) Diese Lösung funktioniert für mich zu bekommen. – user240181

+0

-1 Eine Weiterleitung für eine Bildanforderung zurückzugeben ist eine schlechte Übung. Sie sagen dem Kunden, dass er eine * weitere * Anfrage machen soll. Erhöhte Bearbeitungszeit –

+0

@FreshCode - fair genug. Kennst du eine Alternative? – ctrlplusb

1

Versuchen Sie, das Bild mit einem WebClient Laden:

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

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

Würde dies nicht den Zweck von Amazon Hosting schlagen, wenn Sie die Bandbreite durch das Übertragen der Bilder besteuern wollen? – drake7707

+0

Ja, aber ich möchte die Größe der Bilder im laufenden Betrieb ändern. –

1

Sie kann eine webrequest machen den Strom

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

verdammt, viel zu langsam :) – Pharabus