【问题标题】:how to find MIME type of a image which has no extension?如何找到没有扩展名的图像的 MIME 类型?
【发布时间】:2016-12-25 10:56:54
【问题描述】:

我正在使用 Node.js 服务器,并且正在将图像保存到没有文件扩展名的服务器上,(图像名称只是一个数字)有没有办法找出这种图像的 MIME 类型?我需要它,因为浏览器正在下载图像而不是在浏览器中打开它。

我正在使用 gm(GraphicsMagick) 包将文本写入图像并将其保存到没有扩展名的文件夹中。当我通过res.sendFile('project root/uploads/cache/1') 发送此路径时,浏览器不理解它的图像并下载它,我希望它在同一个选项卡中打开它

我也试过设置image/*,浏览器只是下载图片,我不确定这种API是否可以在React-Native应用程序上正常使用。

【问题讨论】:

    标签: node.js image mime


    【解决方案1】:

    假设你使用multer作为你的文件上传中间件:

    Router.js

    multer  = require('multer'),
    
    storage = multer.diskStorage({
        // Configuring multer to upload towards the public/uploads map
        destination: function(req, file, cb) {
            cb(null, 'public/uploads')
        },
        // Rename the file, so we can create a reference to save in the database.
        filename: function(req, file, cb) {
            var ext = file.originalname.split('.')
            cb(null, 'upload-' + Date.now() + '.' + ext[ext.length - 1])
      }
    
    })  
    
    // Assign the configured storage to the upload.
    upload = multer({ 
        storage: storage,
    })
    

    我将我的存储配置为将所有图像(默认情况下 multer)重命名为上传 - Date.now() 和 ext 数组中的扩展名。这样,文件会以扩展名保存,并自动给出以下结果:

    【讨论】:

    • 对不起,我之前没有提到这一点,我没有使用 multer 或任何多部分表单数据,我正在使用 gm(GraphicsMagick) 包将文本写入图像并将其保存到一个文件夹中扩展名。当我通过res.sendFile(__dirname+'/uploads/cache/1') 发送此路径时,浏览器不理解它的图像并下载它,我希望它在同一个选项卡中打开它
    【解决方案2】:

    一种方法,已经在库中为您完成(我不会在 Node 上花费太多时间):创建文件签名到扩展名的映射,并使用上传的前几个十六进制数字进行查询文件。

    文件签名(又名“幻数”)及其扩展名的良好来源: https://en.wikipedia.org/wiki/List_of_file_signatures

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-14
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 2015-10-03
      • 2016-06-15
      • 2013-09-11
      相关资源
      最近更新 更多