繁体   English   中英

使用 PHP 将照片上传到 Photobucket

[英]Uploading Photos to Photobucket with PHP

我正在尝试使用 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 中完成文件上传,但我阅读了此处和 web 上的其他各个地方的一些帖子。 基本上,我有一个测试页面,其中包含一个 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

我不认为我的基本字符串有问题,因为正如我所说,它看起来不错,而且我尝试过的任何其他方法都没有问题。 我认为 curl 发送数据的方式有问题,原因有两个。

1) 起初,当我尝试执行删除请求时,我在删除相册时遇到了问题,并且遇到了类似的错误,但是,当我只是使用添加的参数_method=DELETE进行发布请求时,一切正常

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

我会认为这与我分配 uploadfile 参数的方式有关,但它并没有抱怨文件只有签名和文档说将该参数排除在基本字符串之外。

有人有想法吗? 现在我在想我错过了一些 curl_setopt 的。

我会将我的请求与参考链接中的示例进行比较,但我不知道如何查看 Curl 请求的正文(我可以查看标头,它确实说 multipart/form-data)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM