2011-04-14 71 views
1

我有一個webforms站點,用戶上傳文件,文件名等被保存到數據庫。這些文件然後顯示在數據列表中。我試圖讓這個datalist顯示不同的圖像(圖標)來表示文件類型。從服務器端動態設置圖像控制圖像asp.NET

這是我的代碼背後。 fm.getIcon是一個自定義函數,它將服務器上的完整文件路徑返回到表示文件類型的合適圖像。

當我調試的代碼,我可以確認圖像並在imgFile存在路徑

Private Sub DataList1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs) Handles DataList1.ItemDataBound 

     Dim docName As Label = e.Item.FindControl("fileNameLabel") 
     Dim docImage As Image = e.Item.FindControl("image1") 
     Dim imgFile As String = fm.getIcon(My.Computer.FileSystem.GetFileInfo(docName.Text).Extension) 
     docImage.ImageUrl = imgFile 

End Sub 

我的問題是圖像不加載。如果我將imgFile替換爲圖像的硬編碼路徑,它工作正常。

我在想什麼?

回答

1

請試試這個。

//第1種方法

string fileLocation = Server.MapPath("~/Images/MyFile.jpg"); 

FileInfo fileInfo = new FileInfo(fileLocation); 

string fileExtension = fileInfo.Extension; 

//第2種方法

System.IO.Path.GetExtension(Server.MapPath("~/Images/MyFile.jpg")); // Result: .jpg 

//你獲得圖標方法

docImage.ImageUrl = "~/Icons/" + 
fm.getIcon(Path.GetExtension(Server.MapPath("~/Images/MyFile.jpg"))); 

public string getIcon(string extension) 
{ 
    switch (extension.ToLower()) 
    { 
    case ".asa": 
     return "asa.png"; 
    case ".asax": 
     return "asax.png"; 
    case ".ascx": 
     return "ascx.png";     
    default: 
     return "unknown.png"; 
    } 
} 
+0

我使用getIcon函數中的server.mappath返回正確的URL。 – 2011-04-15 14:26:53

+0

您不需要getIcon方法中的Server.MapPath。我編輯了答案。 – Win 2011-04-15 14:57:39

1

您應該確認fm.getIcon實際上是爲圖標圖像返回一個有效的URL,而不是機器級文件路徑。您應該能夠輸出fm.getIcon並將其粘貼到瀏覽器中並查看圖像。文件權限可能是一個問題,爲網站提供服務的IIS進程需要能夠讀取圖標圖像文件。

+0

我可以證實,路徑是正確和文件確實存在與正確的權限 – 2011-04-14 23:55:37

+0

事實上,在最終呈現的頁面上,當我「查看源代碼」的路徑也是正確的 – 2011-04-15 00:16:26