2017-02-13 82 views
0

我對node.js完全陌生,所以我試圖找到一種方法來創建一個圖像文件上傳API,它在處理完成後返回一個json 。 我正在使用Watson Developer Cloud(Visual Recognition),它在完成處理任務後返回JSON。Node.js:文件上傳API和JSON返回

我希望你有關於如何完成這個項目的建議&的想法。我想過使用快速庫?

這是我的代碼,它現在處理本地圖像並將JSON結果記錄到控制檯。我希望能夠通過api上傳圖片並在完成處理後返回JSON。

非常感謝!

代碼來處理圖片:

var watson = require('watson-developer-cloud') 
var fs = require('fs') 

//initialisng the service 
var visual_recognition = watson.visual_recognition({ 
    api_key : '<Enter API Key here>', 
    version: 'v3', 
    version_date: '2016-05-20' 
}); 


var params = { 
    images_file: fs.createReadStream('./resources/image.jpg') 
}; 

visual_recognition.classify(params, function(err, res){ 
    if(err) 
     console.log(err); 
    else 
     console.log(JSON.stringify(res, null, 2)); 
}); 

第一次嘗試上傳服務器(感謝@Eduard的提示):

var express = require('express') 
var multer = require('multer') 
var upload = multer({ dest: 'uploads/' }) 


var app = express() 

app.post('/upload', upload.single('avatar'), function (req, res, next) { 
    if(err){ 
     console.log("Error uploading file"); 
    } 
    console.log(req.file); 
    console.log(req.body); 

    res.status(204).end(); 
    console.log("Upload success"); 
}) 

app.listen(3000, function() { 
    console.log('Upload Server listening on port 3000'); 
}); 

不幸的是這將返回「的ReferenceError:未定義ERR [...]',同時用這個簡單的Python腳本上傳圖像:

import requests 
url='http://localhost:3000/upload' 
imageURL = 'ImageURL' 

with open(imageURL, 'rb') as image: 
    filename = image.name 
    files = {'avatar': (image)} 
    r = requests.request(method="POST", url=url, files=files) 
    print(r.text); 
    print(r.status_code) 

旁註: 爲什麼我要使用Node.js服務器? 不幸的是,我的硬件(機器人)不支持Watson-Developer-Cloud Python SDK,並且使用API​​端點直接從python上傳,導致硬件上的舊python版本(SNI問題)造成麻煩

回答

2

首先,您需要ExpressJS才能輕鬆捕獲POST,其次,您應該使用Multer,因爲在我看來,上傳文件是最容易的。從Multer回購

採取

var express = require('express') 
var multer = require('multer') 
var upload = multer({ dest: 'uploads/' }) 

var app = express() 

app.post('/profile', upload.single('avatar'), function (req, res, next) { 
    // req.file is the `avatar` file 
    // req.body will hold the text fields, if there were any 
}) 

示例您對此處檢查文件本身的詳細信息:https://github.com/expressjs/multer

+0

謝謝你的快速反應!我添加了我的第一個嘗試問題,不幸的是這不起作用? (見錯誤)。此外:你有關於如何連接兩個代碼的想法 - >成功上傳圖像後,處理圖像? – JSt

+0

@JSt你好!您正試圖訪問一個名爲'err'的未定義變量。你需要先打電話給你的中間件。請檢查我的要點:https://gist.github.com/EduardJS/21f6903b96c7659e64d118adfc5450fc – Eduard