如何使用 PHP 从服务器上的保管箱保存文件

How can I save a file from dropbox on a server using PHP

我正在尝试使用 PHP 从 Dropbox 获取文件并将其保存在我的服务器上,但到目前为止还没有成功。这是我想出的:

$file = fopen('factura-17891.pdf', "w+");

$headers = array(
    'Authorization: Bearer <token>',
    'Dropbox-API-Arg: {"path": "factura-17891.pdf"}'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://content.dropboxapi.com/2/files/download");
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_FILE, $file);

$result = curl_exec($ch);
curl_close ($ch);

fclose($file);

它创建了一个名称正确的文件,但我在打开文件时收到此错误:

Something went wrong. Don't worry, your files are still safe and the Dropboxers have been notified. Check out our Help Center and forums for help, or head back to home.

谁能看出上面的代码有什么问题,还是我遗漏了什么?

如果我插入一个有效的访问令牌和您共享的代码的路径,并检查下载文件的内容,我看到它是:

Error in call to API function "files/download": Bad HTTP "Content-Type" header: "application/x-www-form-urlencoded". Expecting one of "text/plain", "text/plain; charset=utf-8", "application/octet-stream", "application/octet-stream; charset=utf-8".

您可以通过在 $headers 中相应地设置 'Content-Type' header 来解决这个问题。

另请注意,您在 Dropbox-API-Arg 中提供的 path 应以 / 开头。

(作为参考,您应该检查状态码以查看调用是否失败。)