2014-10-09 118 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

相关问题