gpt4 book ai didi

javascript - 使用 Axios 检索然后将照片发布到 Foursquare Checkin

转载 作者:行者123 更新时间:2023-11-30 21:04:27 28 4
gpt4 key购买 nike

我正在尝试检索,然后将 JPEG 图像POST 到 Foursquare 的 https://api.foursquare.com/v2/photos/add使用 Axios 的端点在节点中。我尝试了一些使用 Axios(和 Postman)的方法,但总是收到相同的错误响应 Missing file upload:

{
"meta": {
"code": 400,
"errorType": "other",
"errorDetail": "Missing file upload",
"requestId": "NNNNNNNNNNNNNNNNNNNNN" // not the true requestId
},
"notifications": [
{
"type": "notificationTray",
"item": {
"unreadCount": 0
}
}
],
"response": {}
}

图像是使用 Google Static Map API 创建的,并使用 Axios GET 请求检索:

const image = await axios.get(imageURL, {
responseType: "arraybuffer"
});

包装在 async 函数中并成功返回一个缓冲区。数据被读入 Buffer 并转换为字符串:

const imageData = new Buffer(image, "binary").toString();

Here's an example imageData string .我也试过将字符串转换为 base64

此字符串随后被POST发送到 Foursquare 端点:

const postPhoto = await axios.post(
"https://developer.foursquare.com/docs/api/photos/add?
checkinId=1234&
oauth_token=[TOKEN]&
v=YYYYMMDD",
imageData,
{
headers: { "Content-Type": "image/jpeg" }
}
);

其中 checkinIdoauth_tokenv 参数都是有效的。

我尝试了不同的 Content-Type 值,base64 编码 imageData 以及在论坛和此处找到的其他几种解决方案(大多数都是几年前的),但没有任何效果。响应 errorDetail 始终显示 Missing file upload

问题可能在于 POST 请求的结构,但我也可能错误地请求/处理了图像数据。第二(或第三或第四)双眼睛来检查我是否将其放在一起会非常有帮助。

最佳答案

哇,我终于解决了这个问题。

我最终能够通过提供一些提示的 Postman 让它工作。这是使用 request 的 Postman 代码片段:

var fs = require("fs");
var request = require("request");

var options = { method: 'POST',
url: 'https://api.foursquare.com/v2/photos/add',
qs:
{ checkinId: [MY CHECKING ID],
public: '1',
oauth_token: [MY OAUTH TOKEN],
v: [MY VERSION] },
headers:
{ 'postman-token': '8ce14473-b457-7f1a-eae2-ba384e99b983',
'cache-control': 'no-cache',
'content-type': 'multipart/form-data; boundary=---- WebKitFormBoundary7MA4YWxkTrZu0gW' },
formData:
{ file:
{ value: 'fs.createReadStream("testimage.jpg")',
options: {
filename: 'testimage.jpg',
contentType: null
}
}
}
};

request(options, function (error, response, body) {
if (error) throw new Error(error);

console.log(body);
});

其中的关键部分是 fs.createReadStream()。我之前遗漏的部分是将图像作为流传递给请求。

使用它我能够弄清楚 Axios 请求:

const axios = require("axios");
const querystring = require("qs");
const FormData = require("form-data");

const getImageStream = async function(url) {
return await axios
.get(url, {
responseType: "stream"
})
.then(response => response.data);
};

let form = new FormData();
form.append("file", getImageStream([IMAGE URL]));

const requestURL = "https://api.foursquare.com/v2/photos/add";
const requestParams = {
checkinId: [MY CHECKIN ID],
public: 1,
oauth_token: [MY OAUTH TOKEN],
v: [MY VERSION]
};
const requestConfig = {
headers: form.getHeaders()
};

try {
const postPhoto = await axios.post(
requestURL + "?" + querystring.stringify(requestParams),
form,
requestConfig
);

return postPhoto;
} catch (e) {
console.error(e.response);
}

瞧,请求成功,图像被发布到 Foursquare checkin。

关于javascript - 使用 Axios 检索然后将照片发布到 Foursquare Checkin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46787358/

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