2016-03-02 2 views
2

Мне нужно использовать python для отправки изображения через сообщение, а затем загрузить его на стороне узла node.js. КодПолучить изображение, отправленное с сообщения в node.js

Python:

import requests 
from PIL import Image 
import json 

url = 'http://127.0.0.1:8080/ay' 
files = {'file': open('image.jpg', 'rb')} 
r = requests.post(url, data = files) 

Node.js код:

var app = express(); 
app.use(bodyparser.json({ limit: '50mb' })); 
app.use(bodyparser.urlencoded({ limit: '50mb', extended: true })); 

app.post('/ay', function(req, res) { 
    var base64Data = req.body.file 
    require("fs").writeFile("out.png", base64Data, 'base64', function(err) { 
     console.log(err); 
    }); 

    res.send('done'); 
}); 

Но я не могу загрузить файл правильно на сервере, так что я задаюсь вопросом, какой формат питон использует для открывать изображения и как я могу исправить код node.js, чтобы он мог правильно загрузить изображение.

Редактировать: было несколько проблем с кодом, я пытаюсь использовать multer сейчас, но не могу заставить его работать.

Python код:

import requests 

url = 'http://127.0.0.1:8080/ay' 
files = {'file': open('image.jpg', 'rb')} 
r = requests.post(url, files = files) 

Node.js код:

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

app.post('/ay', upload.single('avatar'), function (req, res, next) { 
    console.log(req.file) 
    res.send("done"); 
}); 

app.post('/ay', upload.array('photos', 12), function (req, res, next) { 
    console.log(req.files) 
    res.send("done"); 
}); 

Я попытался как upload.single и upload.array, но ни работы.

+0

Включили вы промежуточное программное обеспечение для обработки данных POST в узле? – adeneo

+0

Yup! Я только что редактировал свой код, чтобы показать его. Я получаю изображение на стороне сервера, но я не знаю, как он закодирован, поэтому я не могу его декодировать. – user1883614

+0

bodyParser не работает с файлами, он говорит так прямо в верхней части [документации] (https://github.com/expressjs/body-parser). Вам нужен multer, busboy или один из тех, кто поддерживает файлы. Кроме того, файлы должны быть отправлены как «multipart/form» с правильными ключами, а не с JSON. – adeneo

ответ

1

Так что я, наконец, понял это с помощью multer ... неправильно называть ключ, почему я не мог использовать multer должным образом.

Python:

import requests 
url = 'http://127.0.0.1:8080/ay' 
files = {'file': open('image.jpg', 'rb')} 
r = requests.post(url, files = files) 

Node.js:

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

app.post('/ay', upload.array('file', 12), function (req, res, next) { 
    console.log(req.files) 
    res.send("done"); 
}); 
0

Посмотрите this blog post which gives an example regarding how to access an uploaded file in node.js

В этом примере, после загрузки bodyParser промежуточного ПО, у вас есть доступ к объекту называется req.files, который содержит информацию о загруженном файле.

Сделайте console.log(req.files) и посмотрите, что он отображает.

Профильное средство bodyParser можно использовать для чтения загруженных файлов в Express v3, который больше не поддерживается.

Если вы используете v4 или выше, вы можете использовать connect-multiparty промежуточное программное обеспечение, как это:

var multipart = require('connect-multiparty'); 
var multipartMiddleware = multipart(); 
app.post('/ay', multipartMiddleware, function(req, resp) { 
    console.log(req.body, req.files); 
    // don't forget to delete all req.files when done 
}); 

Кроме того, я думаю, что ваш код Python не загружая должным образом. Попробуйте с:

requests.post('http://127.0.0.1:8080/ay', files={'image.jpg': open('image.jpg', 'rb')}) 
+0

Итак, у меня есть версия nodejs, которая уже работает ... но это python для nodejs, поэтому я сталкиваюсь с Эта проблема. Мой json, который отправляется на сервер, имеет только одну пару «ключ-значение», которая является файлом: некоторая кодировка. – user1883614

+0

Откуда вы знаете, что часть узла работает нормально? у вас есть HTML-форма, которая загружает файл в эту конечную точку и правильно читается? –

+0

Да, это то, что у меня было. Я проверил ваш код ... req.body - как мне преобразовать это обратно в изображение? Прямо сейчас я вижу буквенно-цифровые символы и% в моем терминале. – user1883614

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

  • Нет связанных вопросов^_^