繁体   English   中英

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

[英]How do I upload a binary file from Meteor to an external API?

我的问题:我不知道如何使用Zendesk API从流星方法中的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编码的文件。 这是我的流星方法:

http://pastie.org/private/irextwfhdbgpknjpjjldw

上传有效,但图片已损坏,我无法打开它。

我对Meteor还是很陌生,并且对编码等也非常满意,感谢任何帮助!

好吧,我想出了解决我问题的方法。

我从本地Meteor HTTP切换到Node请求包。 似乎更好地支持发送二进制数据。 也许我没有正确使用它,但是无论我做什么,Meteor HTTP Call都会以奇怪的格式编码我的文件。

因此,现在我使用此辅助函数对base64 dataString进行解码:

    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!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM