【问题标题】:Node js: How to get file signature headers instead of mime-type?Node js:如何获取文件签名头而不是mime-type?
【发布时间】:2016-08-22 23:01:32
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    尝试使用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上支持的扩展

    【讨论】:

    • 在第 3 行,0 和 262 代表什么?
    • 从第0位开始,读取262字节,读取前262字节
    • 另外,有没有办法在文件上传之前检查它?谢谢!
    • 你应该在这里查看客户端示例npmjs.com/package/file-type#browser
    • 您应该正确引用该文件,删除 .在开始并检查。您还在存储文件而不验证其类型吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 2018-10-16
    相关资源
    最近更新 更多