使用PHP将照片上传到Photobucket

时间:2011-08-17 00:50:21

标签: php api file-upload oauth photobucket

我正在尝试使用Photobucket API。我打算用javascript写一个UI,然后使用AJAX调用服务器,它基本上充当Photobucket服务器的代理。我正在使用服务器作为代理,以便我的Photobucket API consumer_secret不会公开。但是,我在使用PHP上传照片时遇到了一些问题。我已经能够从API中获得其他方法,包括添加和删除相册等经过身份验证的方法。我一直在引用

http://pic.pbsrc.com/dev_help/WebHelpPublic/Content/Methods/Album/Upload%20Media%20to%20an%20Album.htm

http://pic.pbsrc.com/dev_help/WebHelpPublic/Content/Examples/Uploading%20Media.htm

我从来没有在PHP上完成文件上传,但我在这里阅读了一些帖子以及网上的其他各个地方。基本上我有一个测试页面,其中有一个html表单,用于将用户,专辑名称和文件发布到我服务器上的php脚本中。表单编码为multipart / form-data。

当POST请求进入我服务器上的页面时。我的服务器查找用户集的标记并设置基本的oauth参数。然后它为oauth做了所有必要的事情,就像它在其他方法中所做的那样(一切都有效的方法)。

我从基本字符串中排除uploadfile参数,并在生成oauth签名时使用POST方法。对于我的uploadfile参数,我使用以下

$params['uploadfile']= '@'.$_FILES['file']['tmp_name'];

然后我像这样设置curl请求

$ch = curl_init($url.$resource);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params); // Note $params is an array

$response = curl_exec($ch);

curl_close($ch);

我也试过加入

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible);');

然而,在所有这个Photobucket回来后说“身份验证失败签名检查失败”

我看了我的基本字符串,看起来很好。这是一个例子。我删除了各种令牌的实际值:

POST&http%3A%2F%2Fapi.photobucket.com%2Falbum%2Fusername%2Fupload&format%3Djson%26oauth_consumer_key%3D00000%26oauth_nonce%3D1313541553TcVIpWJ18WxEZeXO%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1313541553%26oauth_token%3D000000%26oauth_version%3D1.0%26title%3Dtitle%26type%3Dimage

我不认为我的基本字符串有问题,因为我说它看起来很好,我尝试过的任何其他方法都没有问题。我认为卷曲发送数据的方式存在问题有两个原因。

1)当我尝试执行删除请求时,我首先删除了一个相册时遇到了问题,但是当我只是添加了一个带有添加参数_method=DELETE的帖子请求时,我遇到了类似的错误工作得很好

2)这是我遇到问题的唯一方法,到目前为止,它是唯一需要将数据发送编码为multipart / form-data的方法

我原本以为这与我分配uploadfile参数的方式有关,但是它并没有抱怨文件只有签名和文档说要将该参数留在基本字符串之外。< / p>

有没有人有任何想法?现在我在想我错过了一些curl_setopt。

我将我的请求与参考链接中的示例进行比较,但我不知道如何查看Curl请求的正文(我可以查看标题,它确实说多部分/表单数据)

1 个答案:

答案 0 :(得分:1)

我没有意识到多部分/表单数据提交不需要是原始url编码。一旦我停止编码参数,一切都按预期工作。