2016-08-18 6 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 또는 다중 형태의 데이터를 사용하고 있지 않다, 내가 전에 이것을 언급 didnt는 미안 해요, 난 GM 사용하고 (GraphicsMagick) 패키지를 사용하여 텍스트를 이미지에 쓴 다음 확장자가없는 폴더에 저장합니다. 'res.sendFile (__ dirname + '/ uploads/cache/1')'을 통해이 경로를 보낼 때, 브라우저는 이미지를 이해하지 못하고 다운로드하고, 같은 탭에서 열려고합니다. –

1

한 가지 방법은 이미 (내가 너무 많은 시간을 할애하지 않는 도서관에서 당신을 위해 수행 된 노드) : 확장자에 대한 파일 서명 맵을 만들고 업로드 된 파일의 처음 몇 16 진수로 쿼리합니다.

파일 서명 (일명 "매직 넘버")과 그 확장의 좋은 소스 : https://en.wikipedia.org/wiki/List_of_file_signatures

관련 문제