将图像编码为URL参数node.js

时间:2016-02-02 22:17:04

标签: javascript node.js request

我正在尝试将信息发送到外部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();
        });

但我仍然得到“缺少必需的源参数”作为响应。如何将其指定为“源”参数?

1 个答案:

答案 0 :(得分:0)

如果没有看到您尝试使用的API的文档,很难说;但你确定它并不意味着把图像放在帖子参数中吗?这是使用HTTP发送数据的另一种方式。请参阅this问题/答案,了解如何使用node.js完成此操作。