2016-11-18 8 views
1

하나의 엔드 포인트에서 이미지를 가져 와서 해당 이미지를 제 3 자 Api로 보내는 Express 앱을 쓰고 있습니다. multer을 사용하여 이미지를 디스크에 저장했는데 이미지에 대한 상대 경로가 있지만 실제 이미지 나 이미지 URL을 호출해야하는 API가 필요합니다. 문제는 이미지에 파일 경로가 포함 된 문자열 값만 전달한다는 것입니다.이미지에 대한 로컬 상대 URL이 주어지면 실제 이미지를 보내려면 어떻게해야합니까?

var multer = require('multer') 
var storage = multer.diskStorage({ 
    destination: function(req, file, cb) { 
     cb(null, './uploads/'); 
    }, 
    filename: function(req, file, cb) { 
     cb(null, Date.now() + file.originalname); 
    } 
}); 
var upload = multer({ storage: storage }); 

그리고 내가 여기에이 API 호출에 이미지를 호출 할 필요가 : 여기에 내가 현재 가지고있는 것입니다

router.post('/images/tags/info/image', upload.single('fileName'), function(req, res, next) { 
    console.log(req.file.path); 
    var imageUrl = req.file.path; 
    app.models.predict('APP_KEY', imageUrl).then(
     function (response) { 
      var responseJson = JSON.stringify(response.data.outputs[0].data.concepts); 
      var data = collectTags(responseJson); 
      data.then(function(value) { 
       res.json(value); 
      }); 
     }, 
     function (err) { 
      console.log(err); 
     }); 
}); 

I console.log(req.file.filePath), 나는 유효한 파일 경로를 얻을 수 있지만 실제 이미지를 필요로 할 때 app.models.predict(API_KEY, image)

+0

은 어떻게됩니까'내가 함께 400 오류가 –

+0

을 req.file''badrequest' –

+0

'데이터 : {상태 : {코드 : 11100, 설명 : '나쁜 요청 형식 ', 세부 정보 :'잘못된 json 경로 \ '입력 [0] .data.image.destination \'요청 있음 '. }}}' –

답변

1

파일 시스템에서 이미지를 읽고 API로 보낼 수 있습니다.
예 : (기다리고/비동기를 사용) 64 기수로 화상을 전송

 const bitmap = await q.nfcall(fs.readFile,req.file.path); 
     //remove the temp image 
     fs.unlink(req.file.path);   
     const buffer = new Buffer(bitmap).toString('base64'); 
     app.models.predict('APP_KEY', buffer); 

예. 당신은`.path`를 제거하고 바로 보낼 때

+0

'const bitmap = await q.nfcall (fs.readFile, req.file.path);'을 취합니다. q는 예상치 못한 식별자라고합니다! –

+0

promisify를 위해 q promise를 사용하고 있습니다 만, bluebird 또는 es6 약속과 같은 자신 만의 것으로 대체 할 수 있습니다. 비동기 코드로 작업하는 것입니다. – Hosar

+0

전체 솔루션을 작성할 수 있습니까? 'q.nfcall' 부분에 몇 가지 문제가 있습니다. –