網站中檔案或圖片的路徑問題

來源:互聯網
上載者:User

    今天在做集團網站的部落格子系統的時候遇到了一個問題,圖片路徑問題。系統使用資料庫儲存圖片路徑,然後系統中的各個頁面從資料庫中擷取路徑顯示圖片。路徑用如下方式儲存(~/admin/blog/potho/1235.jpg)。因為需要顯示圖片的頁面在網站的不同目錄下。所以開始考慮使用如上方式儲存。使用.net的asp:Image控制項能夠正常顯示圖片。但是如果要將圖片路徑放在<a>標記的href屬性中,就會出現如下形式的路徑(http://localhost/web/admin/blog/~/admin/blog/potho/1235.jpg),導致路徑出現錯誤。原因可能是a標記不會解析波浪線。

     因此考慮在資料庫中儲存相對路徑,格式如下:admin/blog/potho/1235.jpg。這樣在使用圖片路徑的時候就需要對路徑進行拼接。擷取網站的根路徑加片的路徑得到完整路徑。例如:根路徑(http://localhost/)+ 圖片路徑(admin/blog/potho/1235.jpg)。這樣在a標記中就不會再出現問題。但是如果將網站配置成為虛擬目錄的話,問題又出現了,因為根路徑變為了(http://localhost/web/)這種形式,在以後客戶部署時可能還會變。所以要將這個可變的因素拿出來,變為可動態配置。可以考慮放入web.config檔案中,因為此檔案中的內容不需要編譯。這樣在我們部署網站時就可以靈活的修改路徑了。

    接下來測試asp:Image控制項,對控制項的ImgeUrl使用如下方式邦定了資料:ImageUrl='<%#Common.GetRootPath() %><%# Eval("smallpthotaddress") %>',運行時出現了錯誤。錯誤資訊是:CS1040: 前置處理器指令必須作為一行的第一個非空白字元出。查看錯誤源可以看到:dataBindingExpressionBuilderTarget.ImageUrl = System.Convert.ToString(Common.GetRootPath() %><%# Eval("smallpthotaddress") , System.Globalization.CultureInfo.CurrentCulture);注意看標黃的部分,顯然兩個運算式被傳入Convert.ToString方法轉換為字串,但我們的運算式卻沒有被正常解析。原因是什麼呢,一個邦定運算式的時候並不會出現問題。難道不能放兩個標達式。但在a標記中是同樣的寫法怎麼就沒問題呢,a標記的綁定原來被解釋成如下格式:target.SetDataBoundString(0, System.Convert.ToString(Common.GetRootPath(), System.Globalization.CultureInfo.CurrentCulture));target.SetDataBoundString(1, System.Convert.ToString(Eval("photoPath"), System.Globalization.CultureInfo.CurrentCulture));看來.net環境對伺服器端控制項和用戶端控制項的解析方式不同,所以在對asp:Image控制項綁定時才會出現問題。好,問題的根源找到了,那就想個辦法解決,.net環境的解析方式我們左右不了,那就給asp:Image控制項綁定一個運算式,改為如下綁定方式:'<%#Common.GetAbsolutePath( Eval("smallpthotaddress").ToString()) %>'。問題解決。

    總結:在做網站的時候將上傳得檔案和圖片盡量放在一個檔案目錄。方便管理,因為可能很多人都會用到。擷取路徑的方法寫成公用方法,所有人都使用此方法擷取路徑。路徑需要改動的最好把改動的部分變為可配置的。儲存路徑時將路徑儲存為相對路徑。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.