2008-12-11 24 views
2

在Internet Explorer上,標準HTML文件上傳表單還允許直接輸入文件名(而不是使用文件選擇器對話框)。這使得輸入不存在的文件成爲可能。在其他瀏覽器上(不允許你這麼做),如果在選擇文件後刪除文件,我認爲這種情況仍然會發生。當您在HTML表單中選擇一個不存在的文件進行上傳時會發生什麼?

爲了處理這個問題引起的錯誤(如this one),我需要在服務器端添加一些驗證代碼(這隻有在請求實際發送到服務器時纔有可能,而我不知道在這一點上肯定),或者在客戶端(不能很直接,因爲你不能從JavaScript沙箱訪問實際的文件)。除此之外,唯一的(也可能是最好的)選項似乎是用CSS魔法隱藏輸入框,就像GMail對附件文件所做的那樣。

那麼,當您嘗試上傳不存在的文件時會發生什麼? 是否仍然發送POST請求?或者瀏覽器會中止,如果有,我該如何檢測?

+0

可能重複的[試圖上傳不存在的文件在Internet Explorer中,表單不提交](http://stackoverflow.com/questions/691323/trying-to-upload-a-non-存在的文件在互聯網瀏覽器表單不提交) – 2012-08-17 23:11:59

回答

0

確實很好的問題,在.net中有Request.IsClientConnected,但不知道在這種情況下它是否適用於您,或者如果您甚至首先使用.net。

我會嘗試通過客戶端上的Fiddler和服務器端的WireShark來運行它,並通過查看流量模式來查看是否有任何見解。然後你可以研究如何檢測這個問題。

有興趣看看你想出什麼。對不起,不能給出更好的答案。

0

該帖子發生了,但至少在.Net中,System.Web.UI.WebControls.FileUpload控件有一個HasFile屬性,它會是False(我試圖上傳c:\ tmp \ foo.pdf)。在處理之前檢查該屬性將防止缺少文件引起的任何錯誤。

+0

嗯,我試着提琴手,由@seanb建議,我看不到請求發生。另外,我在服務器端(Java/Struts)有斷點,無法驗證任何傳入的請求。這是使用FCKEditor的圖像上傳在WinXP上的IE6。 – Thilo 2008-12-11 03:07:40

2

我想我想通了。

首先,它似乎有區別,不管它是不存在的文件,還是整個路徑都不正確。如果只有文件丟失,顯然是發生POST。

至少在我提到的情況下(在WinXP和IE6上FCKEditor的圖片上傳對話框),瀏覽器根本沒有提交表單(所以服務器端沒有任何東西可以做)。

可以通過不使用正常表單提交來檢測客戶端上的問題,而是通過具有停止提交(返回false)的onSubmit處理程序,而是使用form.submit()提交表單本身。如果文件丟失,將會出現異常。

try{ 
    form.submit(); 
} 
catch (e){ 
// show some error message 
} 
return false; 
相關問題