2017-04-24 75 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」。 「 –