gpt4 book ai didi

node.js - 将 Base64 图像发布到 Imgur

转载 作者:太空宇宙 更新时间:2023-11-04 01:12:56 24 4
gpt4 key购买 nike

http.get('http://path/to/image.jpg', function (res) {
var img = '';
res.on('data', function (buff) {
img += buff;
});
res.on('end', function () {
var data = querystring.stringify({
image: img.toString('base64'),
type: 'base64'
});
var opts = {
host: 'api.imgur.com',
path: '/3/image',
method: 'POST',
headers: {
'Authorization': 'Client-ID myId',
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': data.length
}
};
var req = https.request(opts, function (res) {
res.on('data', function (buff) {
console.log(buff.toString());
});
});
req.end(data);
});
});

img 是我从 URL 下载的字符串。当我执行它时,我得到:

querystring.js:114
return encodeURIComponent(str);
^
URIError: URI malformed

如何将帖子数据提交至Imgur正确吗?

最佳答案

事情是这样的:您的 img 将是一个包含二进制数据的字符串,并且它不会被正确地进行 Base64 编码。正如 swiewvu24 提到的,您希望在进行 Base64 编码时有一个缓冲区。不幸的是,这个解决方案也不完全正确。

与您已有的相比,最小的改变就是创建一个像这样的新缓冲区:

var data = querystring.stringify({
image: new Buffer(img, 'binary').toString('base64')
});

请注意'binary',这将确保您获得正确的数据转换。另一种解决方案是,当您下载图像时,不要连接字符串,而是收集数组中的所有 block ,然后使用 Buffer.concat 从中创建一个缓冲区:

http.get('http://path/to/image.jpg', function (res) {
var imgData = [];
res.on('data', function (buff) {
imgData.push(buff);
});
res.on('end', function () {
var img = Buffer.concat(imgData);
var data = querystring.stringify({
image: img.toString('base64'),
type: 'base64'
});
// ...

关于node.js - 将 Base64 图像发布到 Imgur,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14699782/

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