如何将二进制文件从 Meteor 上传到外部 API?
How do I upload a binary file from Meteor to an external API?
我的问题:我不知道如何使用 Zendesk API.
在我的 Meteor Methods 中从 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 方法:
http://pastie.org/private/irextwfhdbgpknjpjjldw
上传成功,但图片已损坏,无法打开。
我对 Meteor 还是很陌生,对编码等也很陌生,感谢任何帮助!
好吧,我找到了解决问题的方法。
我从原生的 Meteor HTTP 切换到了 Node 请求包。它似乎更好地支持发送二进制数据。也许我没有正确使用它,但无论我做什么,Meteor HTTP Call 都会以奇怪的格式对我的文件进行编码。
所以现在我用这个辅助函数解码 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'
};
我使用请求 post:
request.post(options, function(error, response, body){
var parsedJSON = JSON.parse(body);
callback && callback(null, parsedJSON);
});
现在一切正常,我可以将二进制数据上传到 Zendesk API!
我的问题:我不知道如何使用 Zendesk API.
在我的 Meteor Methods 中从 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 方法:
http://pastie.org/private/irextwfhdbgpknjpjjldw
上传成功,但图片已损坏,无法打开。
我对 Meteor 还是很陌生,对编码等也很陌生,感谢任何帮助!
好吧,我找到了解决问题的方法。
我从原生的 Meteor HTTP 切换到了 Node 请求包。它似乎更好地支持发送二进制数据。也许我没有正确使用它,但无论我做什么,Meteor HTTP Call 都会以奇怪的格式对我的文件进行编码。
所以现在我用这个辅助函数解码 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'
};
我使用请求 post:
request.post(options, function(error, response, body){
var parsedJSON = JSON.parse(body);
callback && callback(null, parsedJSON);
});
现在一切正常,我可以将二进制数据上传到 Zendesk API!