2013-11-04 165 views
1

我想從我的服務器加載圖像,然後將其加載到一個觀點:即成了圖像在ASP.NET MVC查看

var files = _directoryInfo.GetFiles() 
      .Where(x => x.Name.Contains(request.WarrantyReference)) 
      .ToList(); 

model.Photos = files; 

return View(model); 

然後在查看即時通訊做:

@if (Model.Photos.Count > 0) 
{ 
    @Html.Partial("_Photos", Model.Photos) 
} 

_Photos:

@model List<FileInfo> 
<div class="ui items"> 
    @foreach (var photo in Model) 
    { 
     <div class="item"> 
      <div class="image"> 
       <img src="@photo.FullName"> 
      </div> 
     </div> 
    } 
</div> 

,但似乎沒什麼,我得到以下錯誤在控制檯:

Not allowed to load local resource: 
    file://my-server/dataphoto/WX0001 1.jpg 

所以我想知道是否有可能將照片臨時存儲在我的服務器上,以便將它們提供給View或者有其他解決方法嗎?

回答

2

將文件名(或某些標識符)存儲在您的模型中。

型號

class Model 
{ 
    IList<string> Photos { get; set; } 

創建的HtmlHelper來顯示你的照片圖像。

在你的例子中,你可以存儲「WX0001 1.jpg」作爲照片標識符,然後當你從網絡服務器讀取文件時,你會看到一個特定的目錄。

查看

@model List<FileInfo> 
<div class="ui items"> 
    @foreach (var photo in Model) 
    { 
     <div class="item"> 
      <div class="image"> 
       @Html.PhotoImage(photo) 
      </div> 
     </div> 
    } 
</div> 

public static MvcHtmlString PhotoImage(this HtmlHelper html, string id) 
{ 
    var img = new TagBuilder("img"); 

    var your_image_byte_array = read_image_from_server_using_id; 
    var base64 = Convert.ToBase64String(your_image_byte_array); 

    img.Attributes.Add("src", String.Format("data:image/gif;base64,{0}", base64)); 

    return MvcHtmlString.Create(img.ToString()); 
} 

或者,看看使用的操作方法來顯示圖像... Convert Byte Array to Image and Display in Razor View

1

您需要將用於AppPool服務/託管網站的ASP.NET用戶有權訪問的文件複製到某處。或者,給共享的應用程序池帳戶權限閱讀。另一種方式是讀取文件並將它們存儲在一個字節[]中,最後在屏幕/視圖上呈現它,而不用將文件寫入磁盤。