Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在node.js中获取从post发送的图像_Javascript_Python_Node.js_Multer - Fatal编程技术网

Javascript 在node.js中获取从post发送的图像

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

我需要使用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.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(因为该代码确实有效),但我无法让它工作。