2014-10-09 114 views
0

我正在開發插件以在上傳前預覽和裁剪圖像。 我遇到了一個有趣的bug。上傳前檢查文件類型

我驗證文件擴展名以確定它是否爲圖像。 但我的一個用戶只是改變Total Commander中的文本文件擴展名並嘗試上傳它。

這部分代碼:

reader.onload = function(e) { 
    if(e.target.result.indexOf("data:image")) { //check if file have an image extension 
    return false; 
    } 
    var image = new Image(); 
    image.src = e.target.result; 
    image.onload = function() { 
    // Never have been triggered if user tries to upload text file with *.jpg  extension 
    } 
} 

我如何檢查文件的圖像,並以其他方式表現出一定的警示?

回答

2

如果依靠文件擴展名不夠好,可以檢查文件的第一個字節並檢查一些常見的標題。

這些都是

  • JPEG: FF D8
  • GIF: 47 49 46
  • PNG: xx 80 78 71

看到的第一個字節:http://www.mikekunz.com/image_file_header.html & http://www.libpng.org/pub/png/book/chapter08.html#png.ch08.div.2

就可以讀取字節ü唱歌文件API:HTML5 File API read as text and binary

請記住,客戶端JavaScript檢查仍然可以在客戶端進行修改。所以你需要重新檢查服務器。這就是爲什麼在客戶端上檢查擴展可能就足夠了。積極嘗試上傳非映像的用戶可能會繞過這兩個客戶端檢查。

+1

Hardcore =)我有一個服務器端驗證。但是,如果用戶試圖上傳「錯誤」的文件,他不能預覽。它可以混淆用戶,因爲我想抓住這種情況。但我認爲這不是真實情況=)感謝你的答案,我會嘗試你的解決方案。 – Srw 2014-10-09 14:21:18