我正在尝试将所有文件从我的Dropbox中的特定目录下载到我的Web服务器上的目录,如果还没有同名的文件。
我正在使用此SitePoint Tutorial作为指南。
我遇到的问题是Dropbox API在到达某些文件时会返回Invalid Signature
错误。关于这些文件,我看不出任何奇怪或特殊的东西。有些是PDF,有些是PNG。
我已经阅读了这个could relate to OAuth,但我无法弄明白。
我认为getFile()
中foreach()
的错误,具体取决于文件:
<?php
require_once "bootstrap.php";
if (!isset($access_token)) {
header("Location: authorize.php");
exit;
}
try {
$session = new DropboxSession($config["dropbox"]["app_key"], $config["dropbox"]["app_secret"], $config["dropbox"]["access_type"], $access_token);
$client = new DropboxClient($session);
$path = "/Stuff/folder_to_download";
$home = $client->metadata($path);
foreach($home['contents'] as $item) {
echo "<pre>" . print_r($item, true) . "</pre>";
$path = $item['path'];
if ( $item['is_dir'] == '1' )
continue;
// where to save it
$dest = $config["app"]["datadir"] . "/" . basename($path);
if ( file_exists($dest) ) {
echo "<p>File <code>". $dest . "</code> already exists. Skipped.</p>";
continue;
}
// Download file
if ($file = $client->getFile($path, $dest)) {
if (!empty($dest)) {
unset($file["data"]);
echo "<p>File saved to: <code>" . $dest . "</code></p>";
}
}
}
}
catch (Exception $e) {
echo "<strong>ERROR (" . $e->getCode() . ")</strong>: " . $e->getMessage();
}
?>
authorize.php
文件looks like this。 bootstrap.php
looks like this。
更新1:我仍然无法解决此错误。我可以使用一组不同的Dropbox / PHP代码来代替这个sitepoint吗?
这是删除try / catch时的原始错误:
Fatal error: Uncaught exception 'Exception' with message 'Invalid signature.' in /myapp/lib/dropbox/rest.php:162
Stack trace:
#0 /myapp/lib/dropbox/rest.php(85): DropboxRESTClient->request('https://api-con...', 'GET', NULL, NULL, NULL, true)
#1 /myapp/lib/dropbox/session.php(278): DropboxRESTClient->get('https://api-con...', NULL, true)
#2 /myapp/lib/dropbox/client.php(106): DropboxSession->fetch('GET', 'https://api-con...', '/files/dropbox/...', Array, true)
#3 /myapp/download.php(54): DropboxClient->getFile('/Stuff/Droppod/...', '/myapp/...')
#4 {main}
thrown in /myapp/lib/dropbox/rest.php on line 162
答案 0 :(得分:0)
遇到同样的问题,与路径中有特殊字符的某些文件夹/文件有关,例如'&amp;'或'$'和'('或')'。建议你在对api进行GET查询之前对路径进行编码,否则你最终会得到这样的网址
https://api.dropbox.com/1/metadata/dropbox/Photos & Stuff ~ Jan 2013
而不是像这样正确编码
https://api.dropbox.com/1/metadata/dropbox/Photos%20%26%20Stuff%20~%20Jan%202013
编辑:这是我用来编码路径的代码(javascript)(就像魅力一样)
encodeURIComponent(p)
.replace(/%2F/g, '/')
.replace(/\)/g, '%29')
.replace(/\(/g, '%28');
答案 1 :(得分:0)
&#34;我仍然无法解决此错误。我可以使用不同的Dropbox / PHP代码集代替这个sitepoint吗?&#34;
关于这个问题,您可以尝试使用官方的Dropbox PHP SDK:http://dropbox.com/developers/core/sdks/php