0

我在尝试使用 PHP 和 Dropbox API 上传文件时遇到问题。当 cURL 执行时,我得到一个找不到页面的错误。这表明存在 URL 问题,但我看不出它是错误的。

该文件存在并且所有 OAuth 都在工作。

错误截图: 找不到页面错误

这是正在使用的代码 - 我在这里遗漏了什么吗?

$filePathName = "/path_to_file/my_image.png";
$url = "https://api-content.dropbox.com/1/files_put/sandbox/my_folder/my_image.png";

$headers = array("Content-Type: ".mime_content_type($filePathName)."\r\nContent-Length: ".filesize($filePathName)."\r\n".
    "Authorization: OAuth oauth_version=\"1.0\", oauth_signature_method=\"PLAINTEXT\", oauth_consumer_key=\"".DROPBOX_APP_KEY."\", oauth_token=\"".DROPBOX_OAUTH_ACCESS_TOKEN."\", oauth_signature=\"".DROPBOX_APP_SECRET."&".DROPBOX_OAUTH_ACCESS_SECRET."\""
);

$fh = fopen($filePathName, "rb");

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_PUT, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_INFILE, $fh);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filePathName));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$apiResponse = curl_exec($ch);

fclose($fh);

die("Response:<br />".$apiResponse);
4

2 回答 2

0

另请参阅https://www.dropbox.com/developers/core/api

上传文件的 url 结构是https://api-content.dropbox.com/1/files_put/<root>/<path>?param=val. 其中 root 是 root 相对于指定路径的根。有效值为沙盒和保管箱。因此,您的网址中缺少根。

于 2013-04-24T20:12:19.333 回答
0

我已经设法修复它!

问题在于我构建标题的方式。应该是这样的:

$headers = array(
    "'Content-Type: ".mime_content_type($filePathName)."'",
    "'Content-Length: ".filesize($filePathName)."'",
    "Authorization: OAuth oauth_version=\"1.0\", oauth_signature_method=\"PLAINTEXT\", oauth_consumer_key=\"".DROPBOX_APP_KEY."\", oauth_token=\"".DROPBOX_OAUTH_ACCESS_TOKEN."\", oauth_signature=\"".DROPBOX_APP_SECRET."&".DROPBOX_OAUTH_ACCESS_SECRET."\""
);

Content-TypeandContent-Length不再以 and 结尾,\r\n现在被 and 包围,'是数组中的单独元素。

当我使用该curl_getinfo功能时,我得到了一个线索,并且http_code是 400,这意味着一个错误的请求。这让我远离了 Dropbox 返回的“找不到页面”错误,并让我进一步调查了标题。

于 2013-04-25T09:15:56.657 回答