这个问题是我之前的一个问题。我现在使用的修改后的大文件上传脚本如下图
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
所知,Dropbox 有时会忽略该参数,最终我还是会收到桌面文件更新通知。 - 更多的问题 - 查看注释掉的
@unlink
行。我有这个是因为我需要$local
在 Dropbox 上传成功后丢弃文件。问题是,如果我执行unlink
本地文件,一切正常,但 Dropbox 上上传的文件是空的。
我不清楚为什么会这样。我一直无法找到任何确定的信息,但我的理解是 cURL 调用始终是同步的。如果不是,则很难相信来自 Dropbox API 的响应是文件已真正上传到 Dropbox 的明确确认。
我遇到过关于cURL 的模糊评论,有时在我的搜索中可能是异步的。如果是这种情况,我该如何强制它同步?我总是可以通过检查其年龄的 CRON 作业单独处理本地文件取消链接,但这是一个更混乱的解决方案。