6

对于当前的项目,我正在考虑实施 WebDAV 来呈现客户可以访问的虚拟文件存储。到目前为止,我只做过谷歌研究,但看起来我只需要实现两种方法就可以逃脱:

GET, PROPFIND

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

PUT

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

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

4

8 回答 8

8

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

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

于 2009-01-17T11:29:02.107 回答
6

聚会有点晚了,但我已经实现了大部分 webdav 协议,我可以自信地告诉你,你需要实现大部分协议。

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

以下是我个人的一些发现:

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

希望这可以帮助

于 2009-04-23T03:25:52.663 回答
6

我在大约一天的工作中实现了大部分 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

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

于 2010-09-23T19:43:11.523 回答
2

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

Apache Jackrabbit 对 WebDAV 的支持

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

BitKinex 主页

于 2008-12-11T19:48:58.507 回答
2

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

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

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

这一切都在我的脑海中。有可能(可能?)我可能错过了一些东西。如果您有任何问题,请随时通过我网站上的联系信息与我联系。

于 2008-12-11T19:56:03.987 回答
2

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

我发现 Apache Jackrabbit 对实现它很有帮助。但是 webDav 在客户端支持上是一个严肃的 PITA。

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

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

大多数基于 Windows 的 webDAV 客户端假定您的 webdav-server/let 是一个共享点服务器,并且会相应地采取行动(因此不根据 webDAV 协议)

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

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

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

于 2009-02-10T11:42:07.703 回答
1

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

我为 Postres 数据库编写了一个 WebDAV 接口,其中 python 模块以分层文件夹式结构存储在数据库中。使用 cadaver 访问它工作正常,IIRC 一个 GUI windows 浏览器也可以工作,但 Finder 拒绝将共享挂载为只读以外的任何内容。

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

于 2008-12-12T01:33:25.317 回答
0

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

于 2009-07-14T16:09:43.167 回答