使用PHP curl自定义SoundCloud API库上载错误

时间:2014-09-04 03:44:45

标签: php curl soundcloud

出于各种原因,我正在编写自己的SoundCloud API库,并且在上传声音文件时遇到了问题。

对于我使用PHP和Curl的任务,但SoundCloud在使用PHP时不想接受我的文件。当我从终端尝试它时,它工作正常,文件上传成功。我在终端中使用了以下命令:

curl -i -X POST "https://api.soundcloud.com/tracks" -F 'oauth_token=asdasdasdasd' -F 'track[asset_data]=@/home/.../www_data/upload/mpthreetest.mp3' -F 'track[title]=test'

在此之后我尝试了PHP Curl,但我发现了以下错误:Couldn't upload that sound. Couldn't upload that file, sure they're valid soundfiles?。我也尝试了.mp3.wav文件。

这是我的PHP代码:

$url = "{$this->apiURL}/tracks";

$curl = curl_init();
// Set options
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => $url,
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => http_build_query(array(
        'oauth_token' => $this->getToken(),
        'track[asset_data]' => '@/home/.../upload/mpthreetest.mp3',
        'track[title]' => 'test'))
));
$resp = curl_exec($curl);
var_dump($resp);

curl_close($curl);

我尝试从路径的开头删除@,但没有帮助。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

正如您刚才所说,http_build_query是弄乱查询的内容。

原因是前面提到的函数将每个特殊字符转换为http符合字符。这意味着@变为%40/变为%20

看起来,cURL之后并不认识到给定的字符串实际上是一个路径。除此之外,它发送纯文本。这意味着目标api没有收到二进制文件,而是接收文件所在的路径。

如果需要编码,我会将文件选项与其他选项分开,对它们进行编码,然后将其附加。

答案 1 :(得分:0)

解决方案非常令人不安。

http_build_query()是罪魁祸首。离开时解决了问题并且上传成功。