Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用从Node.js到SC API的post请求将曲目上载到SoundCloud_Javascript_Node.js_Soundcloud - Fatal编程技术网

Javascript 使用从Node.js到SC API的post请求将曲目上载到SoundCloud

Javascript 使用从Node.js到SC API的post请求将曲目上载到SoundCloud,javascript,node.js,soundcloud,Javascript,Node.js,Soundcloud,这是我关于Stackoverflow的第一个问题,所以让我为任何失礼提前道歉。(我非常感谢大家对我如何改进这个问题的评论。)同时,非常感谢大家的关注 在过去的几天里,我一直试图从Node.js上传一首歌曲到SoundCloud,但没有成功 真正令人沮丧的是,我能够使用SoundCloud JavaScript SDK从前端发出请求。(我从后端发布帖子的唯一原因是,我最终需要能够安排稍后从服务器发出“post”请求) 我开始怀疑是否有可能通过API上传带有POST请求的歌曲。我怀疑这可能只能通过S

这是我关于Stackoverflow的第一个问题,所以让我为任何失礼提前道歉。(我非常感谢大家对我如何改进这个问题的评论。)同时,非常感谢大家的关注

在过去的几天里,我一直试图从Node.js上传一首歌曲到SoundCloud,但没有成功

真正令人沮丧的是,我能够使用SoundCloud JavaScript SDK从前端发出请求。(我从后端发布帖子的唯一原因是,我最终需要能够安排稍后从服务器发出“post”请求)

我开始怀疑是否有可能通过API上传带有POST请求的歌曲。我怀疑这可能只能通过SDK实现,而据我所知,SDK在Node中不可用

首先,在API文档中,它没有将“POST”列为可用的方法。这可以在“/tracks”部分底部的“Subresources”表中找到。(另一方面,我想知道是否可以通过PUT请求上传歌曲。我以为PUT只是为了更新,但在阅读一些AWS文档时,我注意到可以通过客户端的POST请求或服务器的PUT请求将对象上传到S3存储桶。这仍然与SC文档一致,因为他们建议从前端使用带有SDK的POST,但不要将POST列为API中的选项。)

然而,在报告中说:

要上载声音,请向/tracks端点发送POST请求。这 是用我们的一个SDK使用post方法和passing完成的 有关正在上载的曲目的信息

我尝试使用node soundcloud和soundclouder npm包,但没有成功。我能够对用户进行身份验证,并向“/me”路由发出GET请求(我几乎可以肯定,如果不进行身份验证,我不应该这样做)

下面的示例使用节点soundcloud,但soundclouder几乎相同

    SC.init({
        id: client_id, 
        secret: client_secret, 
        uri: redirect_uri,
        accessToken: body.fields.accessToken
    });
    SC.get('/me/activities', function(err, data){
        if ( err ) {
            throw err;
        } else {
            console.log("data", data);
            res.end();
        }
    })
但是,我无法向“/tracks”路线发出“POST”请求

    SC.post('/tracks', {
        'title': 'test title',
        'asset_data': body.file.buffer
    }, function(err, data){
        console.log("data", data);
        res.end();
    })
这是回报

{ errors: [ { error_message: '401 - Unauthorized' } ] }
我已经通过他们的GitHub打开了“问题”。(Node soundcloud在解决这一问题方面确实很有帮助。)

我最近的尝试是通过在Postman中构造HTTP请求来模仿成功的前端尝试。即使这样也不行。在《邮递员》一书中,我发现了这个错误:“请求实体包含无效的字节序列。请传输有效的UTF-8。”

当我尝试使用'request'npm库从Node.js发出请求时,我会遇到相同的错误

以下是我从chrome dev tools的网络选项卡中取出的来自前端的成功请求的数据。(意识到您可以从dev工具将请求转换为curl post非常棒!):

最后,我发现了这一点,这似乎表明我可能需要将这首歌“框”成在Soundcloud上制作的“录音”

请让我知道,如果有任何其他信息,将有助于我上传。非常感谢您的帮助

General
Headers
Request URL:https://api.soundcloud.com/tracks?
Request Method:POST
Status Code:201 Created
Remote Address:72.21.91.127:443

Request Headers
POST /tracks? HTTP/1.1
Host: api.soundcloud.com
Connection: keep-alive
Content-Length: 73945
Pragma: no-cache
Cache-Control: no-cache
Origin: http://localhost:1337
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary6zA9wPyul1LgLYTW
Accept: */*
Referer: http://localhost:1337/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8

Request Payload
------WebKitFormBoundary6zA9wPyul1LgLYTW
Content-Disposition: form-data; name="track[asset_data]"; filename="test2.mp3"
Content-Type: audio/mp3


------WebKitFormBoundary6zA9wPyul1LgLYTW
Content-Disposition: form-data; name="track[title]"

6:14
------WebKitFormBoundary6zA9wPyul1LgLYTW
Content-Disposition: form-data; name="format"

json
------WebKitFormBoundary6zA9wPyul1LgLYTW
Content-Disposition: form-data; name="oauth_token"

(THIS IS WHERE THE ACCESS TOKEN GOES)
------WebKitFormBoundary6zA9wPyul1LgLYTW--