2017-04-24 76 views
0

我已经采取了将文件上载到文件系统并将文件路径保存在数据库中的路线。从相对图像URL显示图像不工作

我已经成功通过

string path = System.IO.Path.Combine(Server.MapPath("~/Content/images" + 
fileName)); 

上载的图像文件(“〜/内容/图像” +文件名)而我已成功持续的文件路径数据库中。

auction.ImageURL = path; 

但图像没有被渲染,经查该图像源的URL被反映到图像

C:\Users\cmazzochi81\Documents\Visual Studio\2015\Projects\MyAuctionApp\Content\images 

这是怎么回事的绝对路径?

的控制器 -

示范

[DataType(DataType.ImageUrl)] 
[Display(Name = "image URL")] 
public string ImageURL { get; set; } 

观 -

<img src="@auction.ImageURL" title="@auction.Title" /> 

回答

1

Server.MapPath返回提供的虚拟路径的物理目录。如果您正在寻找可用于img src属性的文件夹的虚拟路径,则需要使用VirtualPathUtility.ToAbsolute

由于听起来好像你想保存文件(因此需要物理路径)并返回文件的链接(因此需要虚拟路径),所以需要同时使用这两个文件。

if (ModelState.IsValid) 
    { 
     if (file != null) 
     { 
      string fileName = System.IO.Path.GetFileName(file.FileName); 
      string savePath = System.IO.Path.Combine(Server.MapPath("~/Content/images"), fileName); 
      string url = System.IO.Path.Combine(VirtualPathUtility.ToAbsolute("~/Content/images"), fileName); 

      // file is uploaded 
      file.SaveAs(savePath); 
      var db = new AuctionsDataContext(); 
      auction.ImageURL = url; 
      db.Auctions.Add(auction); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 

     } 
+0

谢谢约翰抽空。这不起作用。 我需要做的是保存文件的相对路径到数据库。 现在正在保存绝对路径。当我在浏览器开发人员工具中编辑路径时: C:\ Users \ cmazzochi81 \ Documents \ Visual Studio 2015 \ Projects \ MyAuctionApp \ Content \ images \ chief.jpg to just src =“\ Content \ images \ chief.jpg,图像呈现 –

+0

如果您使用VirtualPathUtility.ToAbsolute(“〜/ Content/images”),应该返回类似于/ Content/images的内容(根据您的网站设置)。你仍然可以得到完整的路径,听起来它仍然试图使用'Server.MapPath',它将返回文件夹的物理路径,就像这个'C:\ users \ ....'。你能确认什么'VirtualPathUtility.ToAbsolute()'返回? –

+0

它正在返回“/Content/images/image.jpg”检查下面的行 - file.SaveAs(路径);调试器停止并报告以下错误r: mscorlib.dll中出现'System.IO.DirectoryNotFoundException'类型的异常,但未在用户代码中处理 附加信息:找不到路径'C:\ Content \ images \ image'的一部分.JPG”。 “ –