【发布时间】:2016-05-11 22:18:37
【问题描述】:
我正在尝试将信息发送到外部 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();
});
但我仍然收到“缺少所需的源参数”作为响应。如何将其指定为“源”参数?
【问题讨论】:
-
您需要将其发送到请求正文而不是 url,这就是您使用 POST 而不是 GET 的原因。如果 this 是您使用的库,请将
form:{source:base}添加到您作为 request.post() 参数发送的对象中
标签: javascript node.js request