我正在尝试将此 CURL 调用转换为 request.js
curl -i -X POST "https://api.soundcloud.com/tracks.json" \
-F 'oauth_token=***' \
-F 'track[asset_data]=@music.wav' \
-F 'track[title]=Track title' \
-F 'track[sharing]=public'
有趣的是,文件附件('asset_data')位于 formData 对象的第二层。
这不起作用:
var formData = {
oauth_token: '***',
track: {
asset_data: fs.createReadStream('music.wav'),
title: 'Track title',
sharing: 'public'
}
}
request.post({url:'http://service.com/upload', formData: formData}...
我知道这是因为文档和这篇文章说我必须track
嵌入JSON.stringify(track)
但是当我这样做并且 POST 执行时它返回时"buffer":[],"length":0
,我感觉到它没有等待文件在对它进行字符串化之前流式传输。
这是一个地方的所有代码:
function postToSoundcloud(){
var track = {'sharing': 'public',
'title': TRACK_NAME,
'asset_data': fs.createReadStream('music.wav')
}
var formData = {
oauth_token: '***',
track: JSON.stringify(track)
};
var req = request.post({url:'https://api.soundcloud.com/tracks.json', 'formData': formData}, function optionalCallback(err, httpResponse, body) {
if (err) {
return console.error('upload failed:', err);
}
console.log('Upload successful! Server responded with:', body);
});
}
如果有更好的方法而不是使用 request.js,我愿意接受。我可以说 request.js 很受欢迎,但我对 node 还是很陌生。
非常感谢大家