Javascript 在node.js中获取从post发送的图像
我需要使用python通过post发送一个图像,然后在node.js服务器端下载它 Python代码:Javascript 在node.js中获取从post发送的图像,javascript,python,node.js,multer,Javascript,Python,Node.js,Multer,我需要使用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) import requests url = 'http://127
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)
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 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');
});
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");
});
但我似乎无法在服务器上正确下载该文件,因此我想知道python用于打开图像的格式,以及如何修复node.js代码,使其能够正确下载图像
编辑:代码有一些问题,我正在尝试使用multer,但似乎无法让它工作
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)
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 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');
});
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,但都不起作用。看看
在该示例中,加载bodyParser中间件后,您可以访问名为req.files的对象,该对象包含有关上载文件的信息
执行console.log(req.files)
并查看它显示的内容
bodyParser中间件可用于读取Express v3中上载的文件,该版本不再维护
如果使用v4或更高版本,则可以使用中间件,如下所示:
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");
});
您是否包含了中间件来处理节点中的POST数据?是的!我只是编辑代码来显示它。我在服务器端接收图像,但我不知道它是如何编码的,所以我似乎无法解码它。bodyParser对文件不起作用,它在页面顶部这样说。您需要Mutter、busboy或其他支持文件的人。此外,文件必须以
multipart/form
的形式发送,并使用正确的键,而不是JSON。我认为您的python应该是r=requests.post(url,files=files)
,因此我已经有了该版本的nodejs版本。。。但这是python到nodejs的关系,这就是我遇到这个问题的原因。发送到服务器的json只有一个键值对,即file:some encoding。您如何知道节点部分工作正常?你有一个HTML表单可以上传一个文件到那个端点,并且读取正确吗?是的,这就是我所拥有的。我确实测试了你的代码。。。req.body-如何将其转换回图像?现在我在终端中看到字母数字字符和%。实际上,我编辑了代码-现在我尝试使用multer而不是您的multipart(因为该代码确实有效),但我无法让它工作。