这里是文章模块栏目内容页
nextcloud实现文件分块上传的webdav接口详解

导言

上传大文件总是有点问题,因为您的连接可能被中断,这将使您的整个上传失败。NextCloud有一个分块API,您可以在其中上传更小的块,这些块一旦全部上传,就会组装在服务器上。

请注意,下面的示例代码cur请求,在参数之间有空格(换行的地方) 实际命令不换行。

使用

该API仅适用于实例的注册用户。并使用路径:<server>/remote.php/dav/uploads/<userid>。对于本指南,我们将假定:https://server/remote.php/dav/uploads/roeland

开始块上传

块上传将在1个文件夹中处理。这是所有块被上传到的位置。

首先创建一个具有唯一名称的文件夹。您可以列出当前可用的文件夹,但如果您随机选择UUID,则碰撞的几率很小。

curl -X MKCOL -u roeland:pass
 https://server/remote.php/dav/uploads/roeland/myapp-e1663913-4423-4efe-a9cd-26e7beeca3c0

上传块

一旦为这些块创建了一个文件夹,我们就可以开始上传这些块了。我们对您试图上传的块的顺序或大小没有限制。这意味着,您甚至可以调整您的块大小,以适应您的可用带宽。例如,如果您从移动互联网切换到WiFi,您可能需要增加块大小。

我们把它们分类。在组装之前。因此,建议以排序始终有效的方式命名它们。

XXXXXXXXXXXXXXX-YYYYYYYYYYYYYYY

哪里XXXXXXXXXXXXXXX是块的起始字节(带有前导零)和YYYYYYYYYYYYYYY带前导零的块的结束字节。

curl -X PUT -u roeland:pass
 https://server/remote.php/dav/uploads/roeland/myapp-e1663913-4423/000000000000000-000000010485759 -d @chunk1
 
 curl -X PUT -u roeland:pass
  https://server/remote.php/dav/uploads/roeland/myapp-e1663913-4423/000000010485760-000000015728640 -d @chunk2

这将上传2块文件。第一个块的大小为10 MB,第二个块的大小为5MB。

组装块

在服务器上组装块是一个从客户端开始移动的问题。

curl -X MOVE -u roeland:pass 
--header 'Destination: 
 https://server/remote.php/dav/uploads/roeland/myapp-e1663913-4423-4efe-a9cd-26e7beeca3c0/.file

服务器现在将组装块并将最终文件移动到文件夹中。dest/file.zip.

如果应该设置修改时间,可以将其作为头添加到日期为unixtime:

curl -X MOVE -u roeland:pass --header 'X-OC-Mtime:1547545326'
 --header 'Destination:https://server/remote.php/dav/files/roeland/dest/file.zip'
  https://server/remote.php/dav/uploads/roeland/myapp-e1663913-4423-4efe-a9cd-26e7beeca3c0/.file

“否则,当前上载日期将用作修改日期。

这些块和上传文件夹将在之后被删除。

中止上传

如果上传必须中止,这是一个简单的事情或删除上传文件夹。

curl -X DELETE -u roeland:pass
 https://server/remote.php/dav/uploads/roeland/myapp-e1663913-4423-4efe-a9cd-26e7beeca3c0/


更多栏目
相关内容