节点 js:请求 js 多部分二级文件和 JSON.stringify
node js: request js multipart 2nd level file and JSON.stringify
我正在尝试将此 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}...
我知道这是因为 the docs and 说我必须将 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 还是很陌生。
非常感谢大家
您需要像对 curl 一样对其进行格式化:
var formData = {
oauth_token: '***',
'track[asset_data]': fs.createReadStream('music.wav'),
'track[title]': 'Track title',
'track[sharing]': 'public'
}
我正在尝试将此 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}...
我知道这是因为 the docs and 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 还是很陌生。
非常感谢大家
您需要像对 curl 一样对其进行格式化:
var formData = {
oauth_token: '***',
'track[asset_data]': fs.createReadStream('music.wav'),
'track[title]': 'Track title',
'track[sharing]': 'public'
}