Node js:如何获取文件签名头而不是mime-type?

时间:2016-04-28 09:17:46

标签: javascript node.js module mime-types file-extension

我为我的节点js项目下载了this模块,它似乎在某一点上工作正常。如果你console.log(mime.lookup(pathToFile));它返回文件所具有的正确文件类型。问题是它检查文件扩展名以获取文件类型,而不检查文件的前几个字节(文件签名头)以实际获得正确的文件类型。因此,如果我有.png图片,则会返回image/png,但如果我只是将文件扩展名更改为.mp4,则认为该文件是video/mp4。有没有办法安全地检查它,以便某些用户不会上传对服务器有害的东西?也许另一个模块?谢谢!

1 个答案:

答案 0 :(得分:2)

尝试使用file-type

  

检测Buffer / Uint8Array的文件类型

     

通过检查缓冲区的幻数来检测文件类型。

const readChunk = require('read-chunk'); // npm install read-chunk 
const fileType = require('file-type');
const buffer = readChunk.sync('unicorn.png', 0, 262);

fileType(buffer);
//=> {ext: 'png', mime: 'image/png'} 

需要读取前262个字节。检查page

上支持的扩展程序