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

时间:2012-05-01 10:57:34

标签: ruby-on-rails windows macos file-upload desktop-application

目标: 允许用户选择文件夹,然后递归查找与文件模式匹配的所有文件并将其传输(POST)到我的Web服务器

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

由于安全原因,标准网络技术(我们使用的是plupload)不支持此功能。

附加要求: 易于使用/安装从webapp。需要SSL和应用程序用户凭据。

,其他一些数据,如记录ID(从网络应用获取或创建)来关联上传文件

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

我有什么选择?

执行此操作的代码和对开源库的引用是一种奖励。

3 个答案:

答案 0 :(得分:4)

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

您可以重复使用现有的plupload js代码,并使用adobe air apis进行扩展。理想情况下,它将是一个主要是静态的应用程序,但是可以通过服务器调用来创建策略文档,并在上载时执行任何您想要执行的簿记。在Accessing AIR API classes from JavaScript达到高峰。然后查看filesystem.File类。

Flash具有99.3%的渗透率,用户只需点击“安装我的上传器”即可自动安装空中框架。 Air也适用于Android和iDevices,因此您的应用程序可能适用于99.999%的用户和他们的妈妈。

我花了一分钟才找到它,但这里是Adobe® AIR® API Reference for HTML Developers

哦,看看我在他们的例子中找到了什么:

var directory = air.File.documentsDirectory;

try
{
    directory.browseForDirectory("Select Directory");
    directory.addEventListener(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);
    }
}

答案 1 :(得分:1)

我会从这样的东西开始构建一个客户端: https://github.com/ms4720/s3sync 这样你就可以把它留在红宝石家庭中。如果你需要友好的gui: http://shoesrb.com/tutorials/

答案 2 :(得分:0)

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

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

GitHub示例在rails应用程序中使用devise进行身份验证,并使用相同的凭据为用户访问私有存储桶,他们可以通过任何WebDav客户端上载文件。您的网络应用可以提供包含网址中的用户名的链接,以便更方便地访问。

OS X的Finder通过Finder&#34; Connect to Server&#34;本地支持WebDav。对话框(自10.1.1起)。

如果您的用户使用Linux,我相信他们可以将WebDav弄清楚。

从扫描http://en.wikipedia.org/wiki/WebDAV看起来Windows在Win98中支持WebDav。但是,与其他所有Web标准一样,微软已经决定成为创新者。听起来好像用户是最新的KB892211,KB907306,Office,Internet Explorer,OLE-DB和/或&#34; Microsoft Update for Web Folders&#34;他们应该能够轻松地使用各种身份验证方案通过SSL访问WebDav文件夹。我确定您的所有Windows用户都在使用具有所有最新更新和完整Office套件的正版Windows。

由于您的rails app WebDav服务器,您将能够抛出错误(无法将该文件写入服务器),后处理上传的文件/目录,以及您需要的任何簿记(您拥有用户的帐户,以及他们上传的内容)。 Dav4rack非常好。您可以将实际的文件系统用作后端或数据库,或将上传的文件反弹到S3,或者只是在ruby中执行的任何操作。

我不认为这个解决方案可以解决您的问题,并且可以递归地查找与文件模式相匹配的所有文件&#34;组件以及Air应用程序都可以。如果没有实际经验,我可以想象在上传完成后会发生模式匹配(可能带宽效率低下)。