2016-01-15 56 views
-2

我在我的web應用程序中顯示圖像時遇到問題。它從數據庫中獲取照片,並在Web應用程序中顯示。在web應用程序中顯示圖像

protected void btnShowPhoto_Click(object sender, EventArgs e) 
    { 
     string adresURL = @"~/Content"; 
     string camPath = ""; 
     string[] tab = new string[10]; 

     CheckBox[] _boxes = new CheckBox[] { this.CheckBox1, this.CheckBox2, this.CheckBox3, this.CheckBox4, this.CheckBox5, this.CheckBox6, this.CheckBox7, this.CheckBox8 }; 
     System.Web.UI.WebControls.Image[] _images = new System.Web.UI.WebControls.Image[] { this.Image1, this.Image2, this.Image3, this.Image4, this.Image5, this.Image6, this.Image7, this.Image8 }; 
     Label[] _labels = new Label[] { this.lblCameraName1, this.lblCameraName2, this.lblCameraName3, this.lblCameraName4, this.lblCameraName5, this.lblCameraName6, this.lblCameraName7, this.lblCameraName8 }; 
     System.Web.UI.HtmlControls.HtmlAnchor[] _linkscontrol = new System.Web.UI.HtmlControls.HtmlAnchor[] { this.imagelink1, this.imagelink2, this.imagelink3, this.imagelink4, this.imagelink5, this.imagelink6, this.imagelink7, this.imagelink8 }; 

     for (int i = 0; i < 8; i++) 
     { 
      _images[i].Visible = false; 
      _labels[i].Visible = false; 
      _linkscontrol[i].HRef = ""; 
     } 

     for (int i = 0; i < 8; i++) 
     { 
      if (_boxes[i].Checked) 
      { 
       camPath = null; 
       tab = null; 

       camPath = this.GridView2.Rows[i].Cells[0].Text; 


       tab = camPath.Split(new string[] { "StoredPhotos" }, StringSplitOptions.None); 


       //Virtual Path'a 
       camPath = adresURL + tab[1].Replace(@"\", "/"); 

       _labels[i].Visible = true; 
       _labels[i].Text = this.GridView2.Rows[i].Cells[1].Text; 

       _linkscontrol[i].HRef = camPath; 

       _images[i].ImageUrl = camPath; 
       _images[i].Visible = true; 


      } 
      else 
      _images[i].Visible = false; 

     } 


    } 

我的虛擬路徑可能有問題。 E::坎帕斯(虛擬路徑)距離變得\照片\ StoredPhotos \ 20151010 \ 000003819619_201512021335_1_C1,最後的樣子:〜/ 20151010/000003819619_201512021335_1_C1

screenshot

回答

0

瀏覽器希望通過HTTP協議訪問圖像,如果你想觀看的圖像,你有2個diffrerent方式:

  1. (簡單)創建iis下的一個虛擬目錄指向一個物理文件夾E:\ Photo \ StoredPhotos \,並在_images [i] .ImageUrl中調用StoredPhotos,您可以設置值/StoredPhotos/20151010/000003819619_201512021335_1_C1.jpg
  2. (複雜)構建一個類讀取磁盤上的文件並將其寫入響應(使用IHttpHandler int erface),該處理程序添加到web.config文件和設置_images [I]的「NameOfHandler.aspx 20151010/000003819619_201512021335_1_C1
1

這條道路意味着什麼給Web瀏覽器:

~/20151010/000003819619_201512021335_1_C1 

它不知道該如何處理~目錄。這是服務器端概念,而不是客戶端概念。因此,您的服務器端代碼需要將其解析爲實際路徑。

這可能是因爲剛剛明確從服務器的根開始簡單:

string adresURL = @"/Content"; 

因此所產生的URL將開始/Content/.....和瀏覽器將檢查該路徑的圖像。

但是,如果應用程序不是(或可能不是)服務器域的根目錄,那麼您需要手動解釋該目錄或使用某種服務器端幫助程序。有a variety of ways着手,例如:

_images[i].ImageUrl = System.Web.VirtualPathUtility.ToAbsolute(camPath); 
+0

@ 「/內容」 不工作.ImageUrl值..,ToAbsolute(CAMPATH) - 也。我會嘗試不同的方式。 TY。 – mistiq

+0

@mistiq:你必須比「不工作」更具體。 *它做什麼*完全*它如何失敗? – David

+0

好的。抱歉。這意味着,結果與以前相同,如上所示。 – mistiq

相關問題