gpt4 book ai didi

node.js - 在 multipart/form-data POST 请求 Node 中发送缓冲区 | express |要求

转载 作者:搜寻专家 更新时间:2023-10-31 22:22:58 26 4
gpt4 key购买 nike

我有一个从用户上传的图像中获取的缓冲区,然后我想在 multipart/form-data POST 请求中将其发送到另一个 API。

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

我从 API 发送中得到了正确的响应
image_file: fs.createReadStream('image.png')

但是当我尝试时:
image_file: data//缓冲区

我从 API 收到一条错误消息,指出我缺少 image_file 参数。

请帮忙!

Docs对于我正在使用的 API (Face++)
我正在使用 request发出发布请求。

这是我的问题代码:

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 中间件 ( https://github.com/expressjs/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/

关于node.js - 在 multipart/form-data POST 请求 Node 中发送缓冲区 | express |要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49217543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com