你有什么经验/使用WebDAV的经验?

对于当前的项目,我正在考虑实现WebDAV来呈现客户端可以访问的虚拟文件存储。 我迄今为止只做了Google的研究,但看起来我只能实现两种方法:

GET, PROPFIND 

我觉得这很好。 我只是好奇。 如果我想通过以下方式实现file upload:

 PUT 

我没有实现它,但似乎很简单。 我唯一担心的是如果使用标准的Vista Explorer或OSX Finder,用户是否会显示进度表。

我想我正在寻找来自WebDAV经验丰富的人的一些故事。

对于许多WebDAV客户端,甚至是只读访问,您还需要支持OPTIONS。 如果你想支持上传,PUT显然是必需的,而一些客户端(MacOS X?)将需要锁定支持。

(顺便说一下, RFC 4918是信息的来源)。

我在大约一天的工作中实现了大部分WebDAV协议: http : //github.com/nfarina/simpledav

我用Python编写了它,在Google App Engine上运行,我期望任何其他语言都是类似的工作。 总而言之,这是关于两页的代码。

我实现了以下方法:OPTIONS,PROPFIND,MKCOL,DELETE,MOVE,PUT,GET。 到目前为止,我已经测试了Transmit和Cyber​​duck,两者都很好用。

希望这可以为有兴趣实现WebDAV服务器的下一个人提供一些指导。 这不是一个困难的协议,它只是非常密集的抽象语言,如“深度”和“集合”等等。

这是规范: http : //www.webdav.org/specs/rfc4918.html

但是了解协议的最好方法是观察一个客户端与一个工作的服务器进行交互。 我使用传输连接到Box.net的WebDAV服务器,并与Charles Proxy监视流量。

晚了点,但我已经实现了大部分的webdav协议,我可以放心地告诉你需要实现大部分的协议。

对于OS / X,您需要2类WebDAV支持,其中包括LOCK和UNLOCK(我发现完全实现http If:标题非常困难,但对于Finder,您只需要一点点)。

这些是我个人的一些发现:

http://sabre.io/dav/clients/windows/ http://sabre.io/dav/clients/finder/

希望这可以帮助

如果您运行Apache Jackrabbit,比如说Tomcat,那么可以将其配置为提供WebDAV并存储上传的文件。 也许这将是一个有用的模式,甚至是一个足够好的替代计划的实施。

Apache Jackrabbit支持WebDAV

此外,您可能想知道BitKinex客户端(30天免费试用版),我发现它是测试WebDAV服务器的有用工具。

BitKinex主页

我们在内部使用WebDAV为防火墙外的客户端提供了一些文件共享的基于文件夹的视图。 我们正在使用IIS6。

基本上,它归结为在IIS中创建一个虚拟目录,映射到您想通过WebDAV提供的每个网络文件系统。 使用来自“位于另一台计算机上的共享”的内容进行设置 – 使用“网络目录”值的共享的UNC路径。 除索引此资源外,我们打开所有选项。 禁用所有默认内容页面。 打开Windows集成身份验证(我们也使用SSL设置)。 我有根设置拒绝访问匿名,并允许访问任何经过身份验证的用户。 我们也有一个通配符MIME映射(。*到application / octet-stream)。 在IIS中启用WebDAV Web服务扩展。 您还需要设置Web服务器,将权限委派给您可能正在访问的所有文件服务器,以便可以传递用户的凭据。

如果您有Macintosh客户端,则可能还需要一个ISAPI筛选器,用于为Darwin客户端映射401到403错误。 微软和苹果不同意如何处理这种情况,当你没有权限写入目录。 苹果不断重新发送401(拒绝访问)错误的凭据,将其翻译为403(禁止)错误,使这种情况不会发生。 默认情况下,Apple喜欢为它访问的每个目录写一个“点”文件。 在没有写入权限的情况下浏览目录,如果没有过滤器,最终会导致Finder崩溃。 如果需要,我有源代码。

这一切都是我的头顶。 有可能(可能?)我可能错过了一些东西。 如果您遇到问题,请随时通过我的网站上的联系信息与我联系。

我们在基于Web的产品上有一个webDAV servlet。

我发现Apache Jackrabbit对实现它有很好的帮助。 但是webDAV是客户端支持的严重PITA。

许多客户端实现的行为差异很大,而且很可能需要支持几种不同类型的错误实现。

一些示例:MS vista只支持通过SSL进行身份验证

大多数基于Windows的webDAV客户端假设你的webdav-server / let是一个共享点服务器,并会相应的行动(因此不符合webDAV协议)

其中一个例子就是你需要在你的服务器的根目录(即yourdomain.com/而不是yourdomain.com/where/webdav/should/live)上允许和未经验证的LOCK请求,否则你将无法获得MS的写入权限视窗。 (这是tomcat机器上的一个严重的PITA,你的东西通常位于server.com/servlets/paths/thelocation中)

大多数(所有?)版本的MS Office响应不同于webdav链接。

我想我的观点是将webdav支持集成到一个现有的产品可以很难,那么你会期望。 如果可能的话,我会建议使用(半)-standalone webDAV服务器,如jackrabbit webdavserver或apache mod_webdav

我发现OS X的Finder WebDAV支持是非常挑剔的。 为了获得读写支持,除了其他位之外,还必须实现LOCK。

我写了一个PostDatabase数据库的WebDAV接口,python模块以分层文件夹结构的形式存储在数据库中。 用尸体访问它工作得很好,而IIRC的GUI窗口浏览器也工作,但Finder拒绝安装共享除了只读。

所以,我不知道是否会给进度条。 我处理的文件非常小,从它们的读取/复制实际上是瞬间的。 我认为使用Finder的一个大文件的副本可能会提供一个进度条 – 它适用于任何其他类型的挂载共享。