这个问题来自我的previous之一。我现在使用的修改后的大文件上传脚本如下所示
function uploadFile($local,$remote,$token)
{
$args = 'Dropbox-API-Arg:'.
json_encode(array("path"=>$remote,"mode"=>"overwrite","mute"=>true));
$headers = array("Authorization: Bearer {$token}",
'Content-Type: application/octet-stream',
$args);
$ch = curl_init('https://content.dropboxapi.com/2/files/upload/');
curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
curl_setopt($ch,CURLOPT_PUT,1);
curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'POST');
$fp = fopen($local,'rb');
curl_setopt($ch,CURLOPT_INFILE,$fp);
curl_setopt($ch,CURLOPT_INFILESIZE,filesize($local));
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$response = curl_exec($ch);
curl_close($ch);
fclose($fp);
//@unlink($local);
echo $response;
}
我在这里遇到了两个问题。
"mute"=>true
参数,我最终还是会收到桌面文件更新通知。@unlink
行。我有这个,因为我需要在Dropbox上传成功后丢弃$local
文件。问题是,如果我unlink
本地文件一切正常,但Dropbox上传的文件是空的。我不清楚为什么会这样。我一直无法找到任何明确的信息,但我的理解是cURL调用始终是同步的。如果不是,那么很难相信Dropbox API的响应是对该文件真正上传到Dropbox的明确确认。
我在搜索中遇到过关于 cURL有时可能是异步的模糊评论。如果是这种情况我怎么能强迫它同步?我总是可以通过CRON作业单独处理本地文件取消链接,该作业检查其年龄,但这是一个更麻烦的解决方案。