2017-02-13 3 views
0

Я совершенно не знаком с node.js, поэтому я пытаюсь найти способ создания API загрузки изображений, который возвращает json после завершения процесса , Я использую облако разработчиков Watson (визуальное распознавание), которое возвращает JSON после завершения задачи обработки.Node.js: API загрузки файлов и JSON return

Надеюсь, у вас есть советы & идеи о том, как сделать этот проект выполненным. Я думал об использовании экспресс-библиотеки?

Это мой код, который обрабатывает локальное изображение прямо сейчас и записывает результат 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)); 
}); 

Первый Try для сервера загрузки (спасибо @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: эээ не определен [..]», при загрузке изображения с этой простой 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) 

Sidenote: Почему я хочу использовать сервер Node.js? К сожалению, SDK Watson-Developer-Cloud Python не поддерживается на моем оборудовании (робот) и с использованием конечной точки API с прямой загрузкой с питона вызывает проблемы из-за старой версии python на аппаратном обеспечении (проблемы с SNI)

ответ

2

Сначала вам понадобится 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

+0

Спасибо за быстрый ответ! Я добавил свою первую попытку на этот вопрос, к сожалению, это не работает? (См. Ошибку). Кроме того: у вас есть идея о том, как подключить два кода -> После загрузки изображения успешно обработайте изображение? – JSt

+0

@JSt Здравствуйте! Вы пытаетесь получить доступ к неопределенной переменной с именем 'err'. Сначала вам нужно позвонить в ваше промежуточное ПО. Пожалуйста, проверьте мои настройки здесь: https://gist.github.com/EduardJS/21f6903b96c7659e64d118adfc5450fc – Eduard

Смежные вопросы