在 node.js 中获取从 post 发送的图像
Get image sent from post in node.js
我需要用python通过post发送图片,然后在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');
});
但我似乎无法在服务器上正确下载文件,所以我想知道 python 使用什么格式打开图像以及如何修复 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 我都试过了,但都不行。
看看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')})
所以我终于用 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");
});
我需要用python通过post发送图片,然后在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');
});
但我似乎无法在服务器上正确下载文件,所以我想知道 python 使用什么格式打开图像以及如何修复 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 我都试过了,但都不行。
看看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')})
所以我终于用 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");
});