【问题标题】:Node.js: File Upload API and JSON return [duplicate]Node.js:文件上传 API 和 JSON 返回 [重复]
【发布时间】:2017-02-13 20:05:31
【问题描述】:

我对 node.js 完全陌生,所以我试图找到一种方法来创建一个图像文件上传 API,它在过程完成后返回一个 json。 我正在使用 Watson Developer Cloud (Visual Recognition),它在完成处理任务后返回一个 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 上传会导致问题

【问题讨论】:

    标签: javascript json node.js watson


    【解决方案1】:

    首先,您将需要 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

    【讨论】:

    • 感谢您的快速回复!我在这个问题中添加了我的第一次尝试,不幸的是这不起作用? (见错误)。另外:你有没有想过如何连接这两个代码 -> 上传图片成功后,处理图片?
    • @JSt 你好!您正试图访问一个名为err 的未定义变量。您需要先调用中间件。请在此处查看我的要点:gist.github.com/EduardJS/21f6903b96c7659e64d118adfc5450fc
    猜你喜欢
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多