0

这个问题是我之前的一个问题。我现在使用的修改后的大文件上传脚本如下图

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;
}

我在这里遇到了两个问题。

  1. 据我"mute"=>true所知,Dropbox 有时会忽略该参数,最终我还是会收到桌面文件更新通知。
  2. 更多的问题 - 查看注释掉的@unlink行。我有这个是因为我需要$local在 Dropbox 上传成功后丢弃文件。问题是,如果我执行unlink本地文件,一切正常,但 Dropbox 上上传的文件是空的。

我不清楚为什么会这样。我一直无法找到任何确定的信息,但我的理解是 cURL 调用始终是同步的。如果不是,则很难相信来自 Dropbox API 的响应是文件已真正上传到 Dropbox 的明确确认。

我遇到过关于cURL 的模糊评论,有时在我的搜索中可能是异步的。如果是这种情况,我该如何强制它同步?我总是可以通过检查其年龄的 CRON 作业单独处理本地文件取消链接,但这是一个更混乱的解决方案。

4

0 回答 0