使用恢复支持将大文件上传到 WebDAV

Upload large files to WebDAV with resume support

我想使用 WebDAV 将大文件上传到 ownCloud API。

我使用此代码来执行此操作:

<?php
$url = "http://user:password@owncloud.local/remote.php/webdav/test.mp4";
$localfile = "test.mp4";
$fp = fopen ($localfile, "r");
$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_PUT, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));
$http_result = curl_exec($ch);
$error = curl_error($ch);
$http_code = curl_getinfo($ch ,CURLINFO_HTTP_CODE);
curl_close($ch);
fclose($fp);
print $http_code;
print "<br /><br />$http_result";
if ($error) {
   print "<br /><br />$error";
}
?>

但是当连接断开时,此脚本无法恢复上传文件。

是否可以使用 WebDAV 恢复文件上传?

谢谢

使用 CURLOPT_RESUME_FROM_LARGE option.

将其设置为开始简历的位置。或者使用 -1 让 curl 在部分上传的文件结束时自动恢复。

请注意,这只会影响远程端。您还需要寻找指向相同位置的本地文件读取指针(使用 fseek)。所以,如果你想在部分上传的文件结束时恢复,你需要先查询它的大小,才能知道在哪里寻找本地文件的读指针。
参见 Remote file size without downloading file.