Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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
Node.js 在多部分/表单数据POST请求节点| Express |请求中发送缓冲区_Node.js_Upload_Request_Buffer_Multipartform Data - Fatal编程技术网

Node.js 在多部分/表单数据POST请求节点| Express |请求中发送缓冲区

Node.js 在多部分/表单数据POST请求节点| Express |请求中发送缓冲区,node.js,upload,request,buffer,multipartform-data,Node.js,Upload,Request,Buffer,Multipartform Data,我从用户上传的图像中提取了一个缓冲区,然后我想在多部分/表单数据POST请求中将其发送到另一个API 但是,我对请求对象有问题。我想发送流或缓冲区,而不是访问本地服务器文件系统/创建临时文件。我对溪流的概念相当陌生 我从API发送中得到正确的响应 image\u文件:fs.createReadStream('image.png') 但当我尝试时: image\u文件:数据//缓冲区 我从API得到一个错误,说我缺少image\u文件参数 请帮忙 对于我正在使用的API(Face++) 我正在用它

我从用户上传的图像中提取了一个缓冲区,然后我想在多部分/表单数据POST请求中将其发送到另一个API

但是,我对请求对象有问题。我想发送流或缓冲区,而不是访问本地服务器文件系统/创建临时文件。我对溪流的概念相当陌生

我从API发送中得到正确的响应
image\u文件:fs.createReadStream('image.png')

但当我尝试时:
image\u文件:数据//缓冲区

我从API得到一个错误,说我缺少
image\u文件
参数

请帮忙

对于我正在使用的API(Face++)
我正在用它来请求发帖

这是我的问题代码:

app.post('/', (req, res) => {

    const url = 'https://api-us.faceplusplus.com/facepp/v3/detect';

    let data = [];

    req.on('data', (chunk) => {
        data.push(chunk)
    })

    req.on('end', (req, res) => {

        data = Buffer.concat(data);

        const formData = {
            api_key: process.env.FACEPP_API_KEY,
            api_secret: process.env.FACEPP_API_SECRET,
            // image_file: fs.createReadStream('image.png') // works
            image_file: data // doesnt work
        }

        const options = {
            uri: url,
            method: 'POST',
            formData
        }

        request(options, (err, response, body) => {
            if (err) console.log(err)
            console.log(body)
        })
    })
})

在玩了一会儿之后,我有了下面的代码,它对我来说工作得很好。我将Multer中间件()用于原始的多部分上传。有趣的是,除非您指定一个文件名选项,否则请求似乎不能很好地上传文件

const multer = require('multer');
const upload = multer();

app.post('/', upload.any(), (req, res) => {

    const url = 'https://api-us.faceplusplus.com/facepp/v3/detect';

    console.log('Image upload complete, creating request to: ' + url);

    var formData = {
        api_key: process.env.FACEPP_API_KEY,
        api_secret: process.env.FACEPP_API_SECRET,
        image_file: {
            value: req.files[0].buffer, // Upload the first file in the multi-part post
            options: {
               filename: 'image_file'
            }
      }
    };

    const options = {
        uri: url,
        formData: formData,
        method: 'POST'
    }

    request(options, (err, response, body) => {
        console.log('Request complete');
        if (err) console.log('Request err: ', err);
        console.log(body)
    })        
})
我得到的答复如下:

{
    "image_id": "GuF0MUPoaTcL/rbbcg+2kA==",
    "request_id": "1520789753,d913cce4-118e-4893-a1ee-d1ace2b6a65b",
    "time_used": 142,
    "faces": [{
        "face_rectangle": {
            "width": 183,
            "top": 125,
            "left": 220,
            "height": 183
        },
        "face_token": "8b8e327edfc10730f344b1465934a478"
    }]
}
我使用curl测试了图像上传到本地服务器,如下所示:

curl -v -i -F "data=@smiling_woman.jpg" -H "Content-Type: multipart/form-data" -X POST http://localhost:3000/

嘿,谢谢你。不幸的是,我仍然收到错误:“error\u message”:“缺少参数:image\u url、image\u文件、image\u base64”。我只是不明白为什么它是用流而不是缓冲区工作的。非常感谢你付出的努力!嗨,是的,我也一样。我最初使用标准Http服务器进行了测试,我可以看到图像文件存在。让我再测试一下!谢谢Terry,我真的很感谢你的帮助,这是我学习的黄金。谢谢,你让我开心!特里,这个解决方案太棒了。