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