您在实施/使用WebDAV方面有哪些经验?

时间:2008-12-11 19:38:46

标签: asp.net windows macos filesystems webdav

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

GET, PROPFIND

我认为这很棒。我只是好奇。如果我想通过以下方式实现文件上传:

PUT

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

我想我正在寻找一些有WebDAV经验的人的故事。

8 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:7)

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

我用Python编写它以在Google App Engine上运行,我希望任何其他语言都是类似的努力。总而言之,这是两页代码。

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

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

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

但理解协议的最佳方法是观察客户端与工作服务器的交互。我使用Transmit连接到Box.net的WebDAV服务器并使用Charles Proxy监控流量。

答案 2 :(得分:5)

参加聚会的时间已晚,但我已经实施了大部分的webdav协议,我可以放心地告诉您需要实施大部分协议。

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

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

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

希望这有帮助

答案 3 :(得分:2)

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

Apache Jackrabbit Support for WebDAV

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

BitKinex Home Page

答案 4 :(得分:2)

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

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

如果您有Macintosh客户端,您可能还需要一个ISAPI筛选器,为Darwin客户端映射401到403错误。当您没有写入目录的权限时,Microsoft和Apple不同意如何处理这种情况。 Apple继续在401(拒绝访问)错误上重新发送凭据,将其转换为403(禁止访问)错误可防止这种情况发生。默认情况下,Apple喜欢为其访问的每个目录写一个“点”文件。如果您没有过滤器,导航到您没有写入权限的目录将最终导致Finder崩溃。如果需要,我有源代码。

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

答案 5 :(得分:2)

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

我发现Apache Jackrabbit对实现它有很好的帮助。但webDav是客户端支持的严重P.I.T.A。

许多客户端实现的行为差别很大,您很可能必须支持几种不同类型的错误实现。

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

大多数基于Windows的webDAV客户端假设您的webdav-server / let是一个sharepoint服务器并将采取相应的行动(因此不符合webDAV协议)

这方面的一个示例是您需要在服务器的根目录上允许和未经身份验证的LOCK请求(即yourdomain.com/而不是yourdomain.com/where/webdav/should/live)否则您将无法写入在MS窗口中访问。 (这是tomcat机器上严重的P.I.T.A,你的东西通常存在于server.com/servlets/paths/thelocation中)

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

我想我的观点是将webdav支持整合到现有产品中可能比你期望的要困难得多。如果可能的话,我会建议使用(半)独立的webDAV服务器,例如jackrabbit webdavServer或apache mod_webdav

答案 6 :(得分:1)

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

我在Postres数据库中编写了一个WebDAV接口,其中python模块以类似层次结构的文件结构存储在数据库中。用尸体访问它工作得很好,IIRC的GUI窗口浏览器也可以工作,但是Finder拒绝将该共享安装为除了只读之外的任何其他内容。

所以,我不知道是否会给进度条。我正在处理的文件足够小,以至于它们的读取/复制几乎是即时的。我认为使用Finder的大型文件的副本可能会给出一个进度条 - 它适用于任何其他类型的已安装共享。

答案 7 :(得分:0)

这是WSGI WebDAV的另一个开源项目     http://code.google.com/p/wsgidav/ 我选择了PyFileServer项目。