将文件夹和子文件夹上传到webapp

目标: 允许用户select一个文件夹,然后find与文件模式相匹配的所有文件,并将其传输(POST)到我的Web服务器

本质上只是一个更高级的上传对话框…

标准的Web技术(我们使用plupload)不支持这个,由于安全原因,afaik。

附加要求:易于使用/从Web应用程序安装。 SSL和和应用程序用户凭证是必需的。 一些其他的数据,如loggingID(从Web应用程序获取或创build)来关联上传文件将是很好的。

Web应用程序本身是用Ruby on Rails编写的,但是如果我需要某种本地Mac和Windows(即我的用户的80%)桌面客户端,这应该不是问题。

我有什么select?

代码和对开源库的引用是一个好处。

我会建议创建一个Adobe Air应用程序。

您可以重复使用现有的plupload js代码,并使用adobe air apis来扩展它。 理想情况下,这将是一个大部分是静态的应用程序,但要创建策略文档的服务器调用,并做任何你想做的记录上传。 从JavaScript访问AIR API类获取高峰。 然后看看filesystem.File类。

Flash有99.3%的渗透率,用户只需点击“安装我的上传器”,并根据需要自动安装空气框架。 空气也在Android和iDevices,所以你的应用程序可能会提供给99.999%的用户和他们的妈妈。

我花了一分钟才找到它,但这里是HTML开发人员的Adobe®AIR®API参考

哦,看看我在他们的例子中发现:

var directory = air.File.documentsDirectory; try { directory.browseForDirectory("Select Directory"); directory.addEventlistner(air.Event.SELECT, directorySelected); } catch (error) { air.trace("Failed:", error.message) } function directorySelected(event) { directory = event.target ; var files = directory.getDirectoryListing(); for(var i = 0; i < files.length; i++) { air.trace(files[i].name); } } 

我会建立一个这样的客户端: https : //github.com/ms4720/s3sync,以便您可以保持在红宝石家族。 如果你需要一个友好的gui: http : //shoesrb.com/tutorials/

我仍然认为Adobe Air应用程序可以解决您的问题。 提供简单的安装/更新,支持ssl,允许您完全控制用户体验,110%跨平台等。但是,如果你讨厌Adobe或编写UI代码,你有没有看过WebDav / dav4rack gem?

https://github.com/bryanrite/dav4rack-example-devise-subdirectories

该GitHub示例在Rails应用程序中使用devise进行身份验证,并使用相同的凭据访问私有存储区,以便通过任何WebDav客户端上传文件。 您的网络应用程序可以提供一个包含URL中的用户名的链接,以使访问更加方便。

OS X的Finder通过Finder的“连接到服务器”对话框(从10.1.1开始)本地支持WebDav。

如果你的用户使用Linux,我相信他们可以把WebDav搞定。

从扫描http://en.wikipedia.org/wiki/WebDAV它看起来像Windows支持Win98中的WebDav&#x3002; 然而,除了所有其他的网络标准之外,微软已经决定做这个创意。 听起来好像用户是最新的KB892211,KB907306,Office,Internet Explorer,OLE-DB和/或“Web更新的Web文件夹”,他们应该能够通过各种身份验证方案轻松地通过SSL访问WebDav文件夹。 我确定所有的Windows用户都使用正版Windows,并提供所有最新的更新和完整的Office套件。

由于您的Rails应用程序 WebDav服务器,您将能够抛出错误(无法将该文件写入服务器),后处理上传的文件/目录,并做任何你需要的簿记(你有用户的帐户,沿与他们上传的)。 Dav4rack很不错。 您可以使用实际的文件系统作为后端或数据库,或将上传的文件反弹到S3,或者几乎所有您可以在Ruby中进行的操作。

我不认为这个解决方案解决您的“找到所有文件递归匹配文件模式”组件以及一个空气应用程序可以。 如果没有真实世界的经验,我会想象模式匹配会在上传完成后发生(潜在的带宽效率低下)。