如何检查文件是否具有与其扩展名相同的类型
How to check if the file is having the same type as of its extension?
我想构建检查文件类型的Javascript代码。在我创建的web应用程序中,允许用户上传文档文件viz
, doc
, xls
, ppt
, docx
, xlsx
, pptx
, txt
, rar
, zip
, pdf
, jpg
, png
, gif
, jpeg
, odt
,但不应该允许其他文件。我不能只检查文件名中的扩展名。用户可以更改它。
我试着检查内容类型,但它也每次都在改变。欢迎提出建议。
在"现代"浏览器(IE10+, Firefox 4+, Chrome 7+, Safari 6.0.2+等)中,可以使用File
/FileReader
API读取文件内容并在客户端解析它。例如(例如,不是生产代码):
var fileInput = /* Your <input type="file"> element */
fileInput.addEventListener("change", function(e) {
var file = e.currentTarget.files[0];
var reader = new FileReader();
reader.onload = fileLoaded;
reader.readAsArrayBuffer(file);
});
function fileLoaded(e)
{
var arrayBuffer = e.currentTarget.result;
// 32 indicates that we just want a look at the first 32 bytes of the buffer.
// If we don't specify a length, we get the entire buffer.
var bytes = new Uint8Array(arrayBuffer, 0, 32);
// Now we can check the content, comparing to whatever file signatures we
// have, e.g.:
if (bytes[0] == 0x50 &&
bytes[1] == 0x4b &&
bytes[2] == 0x03 &&
bytes[3] == 0x04)
{
// This is most likely docx, xlsx, pptx or other zip file.
}
}
http://jsfiddle.net/35XfG/但是,请注意,例如,.zip中没有以开头的50 4b 03 04。因此,除非您花费相当多的时间查看不同的文件签名(或者找到一些已经这样做的库),否则您很可能会拒绝实际上可能有效的文件。当然,它也有可能给出假阳性。
在这种情况下,误报并不重要,因为这只是作为一种用户友好的措施来检查用户上传的文件是否会被服务器拒绝。服务器应该始终验证最终发送的内容。
当然,读取整个文件来查看前几个字节也不是那么有效。:-)参考Ray Nicholus的评论除非您可以实际解析内容并通过结果判断文件是否属于某种类型,否则我不认为使用纯JS做这件事的好方法。您可能需要考虑暂时将文件上传到服务器,然后在服务器上执行检查。unix文件命令是一个非常有用的工具。它不依赖于文件扩展名,而是使用文件内容来分析文件类型
相关文章:
- TableExport jquery插件:文件名和扩展名问题
- 未捕获的类型错误:无法读取属性'addEventListener'的null chrome扩展名
- 从Chrome扩展名中的popup.html文件在background.js文件中运行一个函数
- 从安卓设备将图像上传到服务器时,文件扩展名错误
- 有人能告诉我如何在cent-os中打开扩展名为.dat的FIle吗
- 在上传之前,我可以在代码中的哪里将文件扩展名更改为小写
- TypeScript解释了各种文件扩展名
- 保存输入字段Chrome扩展名
- 上传前检查文件类型(非扩展名)
- 如何在Shiny中创建一个弹出窗口来警告用户选择一种类型的文件扩展名
- 从URL获取文件扩展名,以便返回正确的内容类型,使用RegEx-良好做法
- 在JavaScript中获取内容类型的默认文件扩展名
- 获取Node.js中没有扩展名的文件的MIME类型
- Html,js文件在mac上显示为文本,甚至在检查扩展名和文本类型之后
- 我怎么能接受所有的文件类型,除了危险的文件扩展名在HTML
- 如何检查文件是否具有与其扩展名相同的类型
- 查找没有扩展名的图像的MIME类型
- 文件扩展名为 MIME 类型
- Chrome for Android的Html文件输入缺少扩展名和mime类型
- S3 api策略条件,限制文件类型/扩展名