2008-11-06 51 views
4

當我使用包含<input id="myFile" type="file" runat="server" />的表單上傳文件時,我的服務器端代碼在使用Firefox時只能看到沒有完整路徑的文件名,而在IE中可以正常工作。檢索使用Firefox上傳文件的完整路徑(服務器端)?

是否有可能在這種情況下檢索完整的文件路徑服務器端?

+2

是IE給你的完整路徑名?!?這是一個嚴重的安全漏洞。 (不是我應該感到驚訝......) – Javier 2008-11-06 14:45:57

回答

8

你不能。實際上,在大多數情況下,只有IE提供的這些信息對於服務器來說並不重要。至少,FF和Opera都不提供這些信息。
[更新]還與Safari瀏覽器,仍然沒有路徑試過......有人報道,Chrome瀏覽器可以提供的信息,儘管是測試版,可能會改變......

也許你會需要它們在某些情況下,企業內部網。在這種情況下,您可能會要求用戶將路徑粘貼到輔助輸入字段中......不是非常友好,但至少他們會知道他們提供了信息。

實際上,我知道有些人需要這些信息是因爲某些原因,所以他們使用JavaScript從文件輸入字段獲取路徑並將其放入隱藏字段中。 FF開發人員發現它是不安全的(你可以從一個簡單的路徑學到很多東西......就像用戶的登錄名一樣),所以在FF3中禁止使用這種用法,這讓一些人對這個版本感到憤怒......

參考文獻:Firefox 3's file upload boxFirefox 3 annoyance: Keying-in disabled in file upload control ...中提到;還有其他File input box disabled leads to great usability problem等。

3

您永遠無法確定獲取完整的文件路徑,甚至無法確定在文件上載文件中提交的可靠文件名或內容類型。即使獲得完整的文件路徑,您也不知道客戶端操作系統上的路徑分隔符是什麼,或者文件擴展名(如果存在)是否表示任何內容。

如果您的應用程序需要提交文件的filepath /文件名/內容類型,而不是向用戶提供上傳項目的默認標題,那麼它會執行錯誤的操作並需要修復。

2

我已經在評論中聲明瞭這一點,但我認爲它是重複的。

微軟選擇讓文件控制爲文件提供整個路徑以便在Intranet應用程序中使用。

只什麼樣的價值應該包含在一個地方makes mention HTML規範:

用戶代理可以使用 值屬性的值作爲初始文件 名。

但是,他們也有多部分/形式 - 數據編碼should look like的例子,它不包含文件路徑。

換句話說,IE打破了標準,你不能依賴其他瀏覽器,甚至更高版本的IE來支持它。

相關問題