2013-04-15 54 views
3

我有一個表格,我通過jQuery's .ajaxSubmit()函數提交。這種形式包括一個文件控制,它已被提出作爲一個可能的失敗點,如果所選文件被重命名,刪除或以其他方式在提交表單之前無法訪問,表單可能會或可能不會基於瀏覽器提交。儘管未能提交是預期的行爲,但用戶沒有指示表單未能提交或爲什麼,這被視爲限制表演。更糟糕的是,在IE中,表單提交時沒有任何文件數據;雖然我可以在服務器端捕捉到這一點,但如果表單完全沒有提交,那將會更理想。文件丟失在文件系統中,抓住表單提交

我知道JavaScript能夠知道任何有關文件系統的知識,而且我也同樣意識到,與跨瀏覽器兼容性有關的任何事情都存在一些不重要的問題。當表單提交失敗或者jQuery正在吞嚥它時,Firefox似乎沒有拋出任何異常。 IE蹣跚而行。我想看看是否有辦法可以捕捉到表單沒有提交或提交無效文件的事實。我還想在提交之前捕捉文件字段是否存在問題。

任何想法?

+2

這不會升到答案的層次,更像是思考食物,所以我會將它作爲評論發佈。您可以通過File API(http://www.w3.org/TR/file-upload/)僅在最近的瀏覽器提交時進行一些基本驗證。除了IE之外,對API的支持一般都很好,它在版本10之前並沒有變得可用。 – dgvid

+0

+1,很好的問題。對於使用Struts2的fileUploading的一般用途提示,請隨時閱讀:http://stackoverflow.com/questions/15957470/struts2-sform-element-trims-the-surl-parameter-in-the-action-attribute/ 15968166#15968166 –

+0

http://stackoverflow.com/questions/10471866/html5-file-api-simple-check-if-file-exists –

回答

0

您可以隨時使用Struts2 validation框架來驗證文件對象。在提交表單時,將fileUpload interceptor應用於您的操作,該操作將File對象設置爲您的操作。一旦你得到的對象,它不是null你可以繼續進行某種驗證。例如file.exists()

+0

當文件被提交時,這是一個很好的預防措施 - IE行爲 - 但是在Firefox中,如果文件不再存在,表單提交將被視爲無操作。我需要某種通知或警報來代替沒有操作。 – jzeitler

+0

@jzeitler您可以使用客戶端驗證,即當'validate = true' struts將使用javascript執行驗證或以任何方式編寫自定義驗證器(如果繼續服務器端驗證並使用ajax提交,然後返回帶有通知的某些結果)。 –