2009-10-05 162 views
17

當我將圖像URL屬性設置爲App_Data文件夾中的asp圖像控件時,圖像顯示在頁面設計視圖中,但在瀏覽器中未顯示。App_Data文件夾中的圖像未在瀏覽器中顯示

<form id="form1" runat="server"> 
<div> 
    <asp:Image ID="Image1" runat="server" ImageUrl="~/App_Data/p3.jpg" /> 
</div> 
</form> 

它似乎很簡單,但它沒有顯示圖像。

回答

38

App_Data文件夾是爲數據庫中的數據庫文件等保留的特殊文件夾,並且不會渲染出網上的任何內容。這是設計的,有意的,不能改變(據我所知)。

您的圖片絕對不屬於App_Data子文件夾 - 將它們放入/images文件夾或其他更合適的文件夾中。

8

圖像不應該存儲在App_Data文件夾中。這是保留的文件,不應該直接提供給用戶,如.mdb數據庫文件等。

我會創建一個/Resources/Resources/Images文件夾脫離站點的根目錄。

+0

謝謝克里斯... – 2009-10-05 12:39:49

+0

大家好,但問題是,當我嘗試在根中創建'/ Resources/Images'文件夾,然後我得到訪問被拒絕錯誤(當該網站託管在IIS中).WHat在IIS用戶帳戶w./o的根目錄中創建目錄的最佳方法是在整個根目錄上給予用戶帳戶權限?是否有可能?當我嘗試在根目錄內創建目錄時,獲取訪問被拒絕錯誤。 – Sagar 2012-06-06 08:42:16

3

好的,做不可能的時間...儘管無法直接從app_data文件夾加載圖像,但您可以編寫自己的http處理程序,它將從app_data文件夾中讀取圖像文件並將其發送回客戶機。這將是一個解決方法,但總的來說,數據僅適用於您的應用程序可以讀取的數據。通過讓處理程序讀取數據,您仍然可以返回這些圖像。

但這是不好的做法,如果你會爲我工作,你會立即被解僱!

+2

即使考慮如何繞過asp.net允許從app_data提供圖像是一個壞主意...... – 2009-10-05 12:42:16

+0

感謝分享想法。 – 2009-10-05 12:43:02

+2

@克里斯,我同意!我會自殺! ;-) – 2009-10-05 12:44:49

4

我不同意。將圖像隱藏在App_Data文件夾中並創建自己的http處理程序時,您可以保護圖像並在顯示圖像之前在圖像上添加版權文字等。

我這樣做,當我有高分辨率的圖片我不想每個人都得到,並有http處理程序縮小圖像,並把一些版權文字。大!

0

來自App_Data文件夾的內容可以提供,但不能直接提供。
直接訪問是不可能的,不建議間接訪問。這是故意的。

但是,添加虛擬路徑可以做到這一點。 看到這個question


我認爲前三個答案符合您的目的。
將圖像存儲在全局資源文件夾或本地資源文件夾中,這些文件也是特殊文件夾,可以通過程序訪問內容。

0

這要看! ;)

保存圖像在App_Data有很好的理由。在用戶可以上傳文件或徽標的情況下,它將保護這些文件,而不會讓其他用戶訪問或公開。

最重要的是,它是每個服務器/部署實例具有不同文件的唯一方法。

部署應用程序時,您可以通過在部署配置中啓用「從App_Data中排除文件」來保護用戶爲每個服務器實例上載的這些文件。

如果您想通過url訪問這些文件,請使用下載處理程序downloadfile.ashx。

希望這會有所幫助。