我正在尝试将信息发送到外部API。引用他们的支持:
“文件应在Base64中编码并插入到图像参数中。”
我不确定我是否误解了一些基本的东西,但是当我尝试这样做时,我得到的是414-URI太大了。
我编写了一个简短的node.js脚本来执行此操作:
var fs = require('fs');
var request = require('request');
var host = "api.xxxxx.com";
var app_id = "xxxxxxxx";
var app_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
var sessionID = null;
function base64_encode(filename) {
// read binary data
var data = fs.readFileSync('./images/' + filename);
// convert binary data to base 64 encoded string
return new Buffer(data).toString('base64');
}
function start() {
fs.readdir('./images/', function(err, files) {
if (err) {
console.log("Error in fs.readdir: ", err);
}
else {
files.forEach(function(file) {
var base = base64_encode(file);
request.post({
url: 'https://api.xxxxxxx.com/media?source=' + base,
headers: {
'app_id': app_id,
'app_key': app_key
}}, function (error, response, body) {
if (response) {
console.log('Status:', response.statusCode);
console.log('Headers:', JSON.stringify(response.headers));
console.log('Response:', body);
}
else {
console.log("No response.");
}
});
});
}
})
}
start();
我也尝试将编码后的图像放入:{},qs:{},并将它基本上移到了所有地方 - 我得到一个“必需的源参数丢失”错误,或者我似乎得到了它是对的,我得到414.任何关于以这种方式发送图像的建议?这是一张144KB的图像。
编辑:
我将代码的内容更改为:
files.forEach(function(file) {
var data = base64_encode(file);
var options = {
host: host,
port: 443,
path: '/media',
method: 'POST',
headers: {
'app_id': app_id,
'app_key': app_key,
'Content-Type': 'image/jpg',
'Content-Length': data.length
}
};
var req = https.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log("body: " + chunk);
});
});
req.write(data);
req.end();
});
但我仍然得到“缺少必需的源参数”作为响应。如何将其指定为“源”参数?
答案 0 :(得分:0)
如果没有看到您尝试使用的API的文档,很难说;但你确定它并不意味着把图像放在帖子参数中吗?这是使用HTTP发送数据的另一种方式。请参阅this问题/答案,了解如何使用node.js完成此操作。