所以,我有這個可愛的問題,人們喜歡提交無效的文件類型或時髦的命名文件...(如.. hey_i_like_"quotes".docx
)有時他們甚至會嘗試上傳一個.html鏈接...在Coldfusion中停止無效的文件類型或文件名提交
我該如何檢查這樣的事情?每次有人提交一個命名不清的項目時,似乎都會產生錯誤。
我應該在提交之前創建一個cfscript來檢查它嗎?還是有更簡單的方法?
所以,我有這個可愛的問題,人們喜歡提交無效的文件類型或時髦的命名文件...(如.. hey_i_like_"quotes".docx
)有時他們甚至會嘗試上傳一個.html鏈接...在Coldfusion中停止無效的文件類型或文件名提交
我該如何檢查這樣的事情?每次有人提交一個命名不清的項目時,似乎都會產生錯誤。
我應該在提交之前創建一個cfscript來檢查它嗎?還是有更簡單的方法?
當你說提交你使用cffile允許你的用戶上傳文件。
如果是這樣,請嘗試使用屬性「accept」並嘗試一下。例如......
<cftry>
<cffile action = "upload"
fileField = "FileContents"
destination = "c:\files\upload\"
accept="image/jpg, application/msword"
>
<cfcatch type="Any" >
<p>sorry we could not upload your file!</p>
</cfcatch>
</cftry>
我個人不會使用「just」JavaScript,因爲這可能會被禁用,並且您又回到了同一條船上。
希望這會有所幫助。
如果是在提交之前,它將是JavaScript而不是cfscript。 Javascript總是可以輪到的,所以我會說你最好在服務器端用ColdFusion做。就我個人而言,我只是將所有東西都包裝在try/catch中(無論如何你都應該這樣做,因爲所有文件上傳類型的東西都是這樣),並且如果文件名不好就拋出一個錯誤。
在服務器上,作爲驗證的一部分,使用reFindNoCase()
以及適當的正則表達式來檢查格式正確的文件路徑。你可以在因特網上找到很多例子的文件路徑的正則表達式,例如this之一。希望有所幫助。
正如@Duncan指出的那樣,客戶端驗證很可能在JavaScript中。就個人而言,如果我有時間/資源,我會爲最終用戶提供便利。如果他們在系統需要DOCX時上傳大量的PDF,那麼在上傳完成之前他們不會收到消息會很麻煩。
就文件名而言,在我看來,最簡單的解決方案(以及我過去使用過的一種解決方案)是假定所有文件名都是壞的,然後重命名它們。有幾種方法可以做到這一點。如果您需要保留原始文件名,我只需使用urlEncodedFormat()將文件名清理成對Web友好的文件。如果你需要保留所有版本,你可以添加一個日期/時間戳,所以bob.xocx變成bob_201104051129.docx或者其他。如果您必須保留原始文件名而不做任何更改,那麼我會建議將數據庫表作爲密碼系統,將原始名稱,時間戳和其他元數據保留在此處,並通過將該文件重命名爲ID來引用該文件。
但是urlEncodedFormat()對於您所概述的內容來說可能就足夠了。
對於用戶體驗來說,最好是在客戶端進行,但對於服務器端來說也是不錯的。
對於客戶端部分,我推薦使用jQuery validation plugin,易於使用。