2013-11-04 164 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用户有权访问的文件复制到某处。或者,给共享的应用程序池帐户权限阅读。另一种方式是读取文件并将它们存储在一个字节[]中,最后在屏幕/视图上呈现它,而不用将文件写入磁盘。