2011-06-24 10 views
3

私のコントローラでは、画像の名前とともに製品のリストを取得し、ビューに必要なサイズに画像を縮小します。イメージはメモリに保存され、レスポンスストリームに書き込む準備が整いました。私は、クライアントが各画像の応答を送信することを知っているが、私はどのように画像を提供するためにそれにフックするか分からない。MVCレスポンスストリームに画像を提供する方法

ビューコード:

@foreach (var product in Model.Products) 
    { 
     @product.Name 
     <img src="@product.Thumbnail"/> 
     Priced From [email protected] 
    } 

コントローラー:ImageResizer.Resize()署名がだから私が思う私の質問は、私が入れない何BE-すべき

Resize(string imageName, int width, int height, Stream outputStream) 

model.Products = 
     DataContext.Products.Where(p => p.Category.Name 
      .Equals(id)).Select(m => new ProductListItem 
       { 
        Name = m.Name, 
        Thumbnail = ImageResizer.Resize(m.Image, 75, 100, <normally I put the output stream here>), 
        LowestPrice = SqlFunctions.StringConvert(m.PriceSet.Prices.Min(p =>p.Price1)) 
       } 
    ); 

ある

ストリームに書き込むことができる各イメージの要求をどのように聞きますか?

答えて

4

public ActionResult Image(int? number) 
{ 
    var media = mr.GetMedia(number); 

    return base.File(media.Content, media.ContentType ?? "image/jpeg"); 
} 
のようなものを持って新しいアクションを追加します

<img src='@Url.RouteUrl("Full", new { action = "Image", controller = "Media", number = product.id })' /> 

または

<img src='@Url.Action("Image", new { number = 3 })' /> 

、画像のURLとして設定する画像をダウンロードする新しいアクションにルート/アクションリンクを取得します。

media.Contentはバイナリコンテンツまたはストリーム参照です

+0

おかげ@DanNskのおかげでそれを考え出し、これが近い私を得た、私自身の答えを参照してください。 – StuTheDog

3

[OK]を、最終的にはDanNskとthis post here

public FileResult Image(string id) 
{ 
    var dir = Server.MapPath("/content/images"); 
    var path = Path.Combine(dir, id); 

    var stream = XTC.Helpers.ImageResizer.Resize(path, 150, 200); 
    var result = new FileStreamResult(stream, "image/jpeg"); 

    return result; 
} 
関連する問題