我对node.js完全陌生,所以我试图找到一种方法来创建图像文件上传API,该API在过程完成后返回一个json。 我正在使用 Watson Developer Cloud(视觉识别),它在完成处理任务后返回 JSON。
我希望您对如何完成这个项目有提示和想法。我考虑过使用express 库吗?
这是我的代码,它现在处理本地镜像并将 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');
});
不幸的是,当使用这个简单的 Python 脚本上传图像时,会返回“ReferenceError: err is not Defined[..]”:
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,并且由于硬件上的旧 Python 版本(SNI 问题),使用 API 端点直接从 Python 上传会导致问题
最佳答案
首先,您需要 ExpressJS 来轻松捕获 POST,其次,您应该使用 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
})
取自 Multer 存储库的示例
您可以在此处了解有关检查文件本身的更多信息:https://github.com/expressjs/multer
关于javascript - Node.js:文件上传 API 和 JSON 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42212601/