节点js:如何获取文件签名标题而不是MIMEtypes?

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

尝试使用文件types 。

检测Buffer / Uint8Array的文件types

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

 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个字节。 检查页面上支持的扩展