Javascript 如何将二进制文件从Meteor上载到外部API?

Javascript 如何将二进制文件从Meteor上载到外部API?,javascript,meteor,zendesk,Javascript,Meteor,Zendesk,我的问题:我不知道如何使用Zendesk API从Meteor方法中的Base64编码字符串发送二进制文件 基本上,我尝试在服务器端的Meteor中复制这个curl命令: curl -u username:password -H "Content-Type: application/binary" --data-binary @file.dat -X POST "https://helpdesk.zendesk.com/api/v2/uploads.json?filename=myfile.da

我的问题:我不知道如何使用Zendesk API从Meteor方法中的Base64编码字符串发送二进制文件

基本上,我尝试在服务器端的Meteor中复制这个curl命令:

curl -u username:password -H "Content-Type: application/binary" --data-binary @file.dat -X POST "https://helpdesk.zendesk.com/api/v2/uploads.json?filename=myfile.dat&token={optional_token}"
我从前端得到一个Base64编码的文件。以下是我的流星法:

上传工作,但图像已损坏,我无法打开它


我对Meteor还是一个新手,而且对编码等方面也很了解,非常感谢您的帮助

我想出了解决问题的办法

我从本机Meteor HTTP切换到节点请求包。它似乎更好地支持发送二进制数据。也许我没有正确使用它,但不管我怎么做,Meteor HTTP调用都会以奇怪的格式对我的文件进行编码

现在我用这个helper函数解码base64数据字符串:

    function decodeBase64Image(dataString) {
        var matches = dataString.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/),
            response = {};

        if (matches.length !== 3) {
            return new Error('Invalid input string');
        }

        response.type = matches[1];
        response.data = new Buffer(matches[2], 'base64');

        return response;
    }
然后我设定我的选择

options = {
    headers: { 'content-type' : 'application/binary', 'Authorization': 'Basic ' + encoded },
    url: zendeskURI + 'uploads.json?filename=' + args.name,
    body: decodeBase64Image(file).data,
    method: 'POST'
};
我使用请求发布:

        request.post(options, function(error, response, body){
            var parsedJSON = JSON.parse(body);

            callback && callback(null, parsedJSON);
        });
现在一切正常,我能够将二进制数据上传到Zendesk API