2012-03-02 65 views
0

我有excel文件abc.xls,並使用命令提示符將其重命名爲abc.doc。 我的要求是:我想上傳一個正確的doc文件,但是在那裏我只能檢查上傳文件的MIME類型,這是不夠的。我想在上傳doc文件之前確認它是一個文檔,並且不允許用戶上傳abc.doc文件,因爲它不是一個doc文件,它是一個excel文件。如何在通過網頁上傳文件之前閱讀word文檔

+0

可能的重複http://stackoverflow.com/q/71944/745359 – wintersolutions 2012-03-02 08:24:15

+0

爲什麼你需要客戶端驗證?如果你不相信輸入,你必須再次在服務器上檢查它。我在問題鏈接中解決的解決方案如何? – wintersolutions 2012-03-02 16:59:09

+0

如果我打開上傳的文件,實際上不是doc文件,它會在ms字中打開時出現損壞的文件等錯誤。所以我正試圖避免這個未來的問題。 – baviskarss 2012-03-03 05:35:01

回答

0

在上傳之前,您可能需要一個ActiveX對象來訪問客戶端系統上的文件內容。檢查與JavaScript的字節數組找到它是否是一個真正的文檔可能證明有趣的,雖然:-) 編輯:

function CheckWordDoc(filepath){ 
    var fso, f, ts, s; 
    var ForReading = 1, ForWriting = 2, ForAppending = 8; 
    var TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0; 
    fso = new ActiveXObject("Scripting.FileSystemObject"); 
    f = fso.getFile(filepath); 
    ts = f.OpenAsTextStream(ForReading, TristateUseDefault); 
    while (!ts.AtEndOfStream) { 
     s = ts.ReadLine(); 
     if (s.indexOf("Word.Document.8") != -1) { 
      ts.Close(); 
      return true; 
     } 
    }   
    ts.Close(); 
    return false; 
} 

http://www.piclist.com/techref/language/asp/vbs/vbscript/jsmthopenastextstream.htm http://msdn.microsoft.com/en-us/library/ hwfw5c59%28V = vs.85%29.aspx

+0

從大小我們不能決定這是適當的文檔文件 – baviskarss 2012-03-02 10:40:35

+0

我知道。這就是爲什麼我說檢查字節數組是否真的是一個真正的doc文件將會很有趣......舊的doc文件在結尾處似乎具有類似於「Word.Document.8」的內容。 docx文件是壓縮的xml,偶爾會有「word /」文本定義節點......但是現在大多數瀏覽器都默認阻止ActiveX,因此我真的推薦上傳文件並檢查服務器上的字節,然後將其保存到磁盤。 – Elementenfresser 2012-03-03 08:04:08

1

因爲OP在評論中寫的:

你是在錯誤的軌道在這裏,驗證應該總是發生在服務器端,您可以添加額外的驗證在客戶端,但它不是必需的。你必須爲一個簡單的理由這樣做:

客戶可以隨時規避客戶端驗證方法,因爲客戶端是完全在其控制下。因此,即使您實施您的驗證方法來檢查其文檔或Excel文檔,不良用戶總是可以向您發送禁用驗證的發佈請求,並且您將獲得Excel文檔或病毒等。

這是一個核心的web編程原則:永遠不要相信輸入數據,你不能僅在客戶端驗證!

其次,您的驗證在服務器上很容易完成。所以你應該上傳任何文件(檢查文件擴展名&大小),然後在服務器上驗證!