2016-08-18 119 views
0

我正在使用Node.js服務器,並將圖像保存到服務器上,沒有文件擴展名(圖像名稱只是一個數字)有什麼方法可以找到這種圖像的MIME類型?我需要它,因爲瀏覽器正在下載圖像,而不是在瀏覽器中打開它。如何找到沒有擴展名的圖像的MIME類型?

我正在使用gm(GraphicsMagick)包將文本寫入圖像,並將其保存到沒有擴展名的文件夾中。當我通過res.sendFile('project root/uploads/cache/1')發送此路徑時,瀏覽器不瞭解其圖像並下載它,我希望它在同一個標​​籤中打開它

我也試過設置image/*,瀏覽器只是下載圖像,我是不確定這種類型的API是否可以在React-Native應用程序上使用而沒有問題。

回答

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數組中的擴展。這樣,文件被保存在擴展,並自動給出以下結果:

Example how it looks when uploaded

+0

我很抱歉,我沒有之前提到這一點,我沒有使用multer或任何多形式的數據,我使用GM (GraphicsMagick)包將文本寫入圖像並將其保存到沒有擴展名的文件夾中。當我通過res.sendFile(__ dirname +'/ uploads/cache/1')發送這個路徑時,瀏覽器不理解它的圖像並下載它,我希望它在同一個標​​籤中打開它 –

1

的一種方法,它已經在圖書館做了你(我不花太多時間在節點):創建文件簽名到擴展名的映射,並用上傳文件的前幾個十六進制數字查詢它。

文件簽名(又名「幻數」)及其擴展的良好來源: https://en.wikipedia.org/wiki/List_of_file_signatures

相關問題