【问题标题】:Encode image into URL parameter node.js将图像编码为 URL 参数 node.js
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 我想我明白你的意思,但我仍然收到“缺少必需的源参数”。我更改了代码以反映更改,让我知道您的想法。我尝试使用的 API 是 kairos.com/docs/api/#emotion-analysis(尝试通过上传图片而不是直接图片链接来发布图片)
  • 他们的文档实际上不是很明显,但是在您的新代码中,您只是在 post 请求的正文中传递文件的 base64 编码,而不是指定它是 source 参数的值.据我所知(尽管从他们的文档中并不清楚)发布请求的主体应该类似于 source=AE3452EED ......在我链接的示例中,它通过使用 querystring.stringify 来实现尽管我认为您可能只需像上面那样制作字符串就可以逃脱(不是很整洁)。或者按照 kecer 在上述评论中所说的那样做。
猜你喜欢
  • 2017-04-03
  • 2023-03-10
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
相关资源
最近更新 更多