内容范围标题和可恢复上传

时间:2012-03-21 16:24:00

标签: c# apache curl webdav

我正在尝试做与此问题的提问者类似的事情。

Uploading big files over HTTP

我想实现Ryan建议的WebDav方法,但遇到了服务器后端的问题。我在大文件上尝试Http PUT和命令行卷曲,希望中断上传并稍后恢复,但是当传输中断时,我的部分上传文件总是被删除。我在某个地方错过了Apache设置吗?

这是我正在测试的curl命令:

curl -v -u test:test -C - -T 2gb.test http://my.server.net/webdav/

我已尝试测试206响应,这显然是支持此功能的任何服务器的必需响应。有人可以确认吗?我收到来自以下卷曲电话的200条回复:

curl -v --header "range: bytes=0-999" -X HEAD -u test:test http://my.server.net/webdav/

2 个答案:

答案 0 :(得分:0)

Content-Range不适用于PUT。

这里要做的正确的事情是为“追加二进制”定义媒体类型,并将其与HTTP PATCH一起使用。

答案 1 :(得分:0)

Julian看起来比webDAV更具权威性。但根据我的经验,PUT确实支持Content-Range,只要服务器实现它(Apache mod_dav会这样做。)webDAV规范似乎没有表明这种或那种方式(http://asg.andrew.cmu。 edu / rfc / rfc2518.html#sec-8.7)和HTTP 1.1规范不需要,但允许PUT请求中的内容范围:(http://asg.andrew.cmu.edu/rfc/rfc2068.html #仲丁基9.6)。也就是说,HTTP PATCH可能是处理它的更好方法。不过,我从未将PATCH与非文本数据一起使用。

看一下mod_dav代码,如果上传失败,它看起来会自动清理文件,所以我在你链接的帖子中的建议不会很有效。

一种可能的(尽管有点hacky)解决方法是一次上传一个文件块。如果失败,请在上一次成功之后重新开始上传。