nodejs:请求jsmultipart二级文件和JSON.stringify

node js: request js multipart 2nd level file and JSON.stringify

本文关键字:文件 二级 JSON stringify 请求 jsmultipart nodejs      更新时间:2023-09-26

我正试图将此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}...

我知道这是因为文档和这篇文章说我必须在JSON.stringify(track) 中嵌入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'
}