【问题标题】:Upload files from folders and sub-folders to webapp将文件夹和子文件夹中的文件上传到 webapp
【发布时间】:2012-05-10 22:10:33
【问题描述】:

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

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

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

附加要求: 从 webapp 易于使用/安装。需要 SSL 和应用程序用户凭据。其他一些数据,如记录 ID(从 Web 应用程序获取或创建)来关联上传文件会很好。

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

我有什么选择?

这样做的代码和对开源库的引用是一个奖励。

【问题讨论】:

  • "递归查找所有与文件模式匹配的文件" 比如,您是否尝试从文件夹上传所有 png(但可能不是 jpg)?你到底想处理什么?
  • 第一个:正确。 2nd:你是什么意思,什么文件类型? *.dcm

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


【解决方案1】:

我建议创建一个 Adob​​e Air 应用程序。

您可以重复使用现有的 plupload js 代码,并使用 adobe air api 对其进行扩展。理想情况下,它将是一个主要是静态的应用程序,但会调用服务器来创建策略文档,并在上传时做任何你想做的簿记。在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);
    }
}

【讨论】:

    【解决方案2】:

    我会从以下内容开始构建客户端: https://github.com/ms4720/s3sync 这样您就可以将其保留在 ruby​​ 家族中。如果你需要一个友好的 gui: http://shoesrb.com/tutorials/

    【讨论】:

    • 这不适用于普通用户。不一定要安装 Ruby,也不能向公众提供 S3 凭据。本质上我只需要一个更高级的上传对话框
    【解决方案3】:

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

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

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

    OS X 的 Finder 通过 Finder 的“连接到服务器”对话框原生支持 WebDav(自 10.1.1 起)。

    如果您的用户使用 Linux,我相信他们可以理解 WebDav。

    从扫描http://en.wikipedia.org/wiki/WebDAV 看来,Win98 中的 Windows 支持 WebDav。然而,与所有其他网络标准一样,微软决定,嗯,有创意。听起来如果用户是最新的 KB892211、KB907306、Office、Internet Explorer、OLE-DB 和/或“用于 Web 文件夹的 Microsoft 更新”,他们应该能够通过 SSL 使用各种身份验证方案轻松访问 WebDav 文件夹。我确信您的所有 Windows 用户都在使用带有所有最新更新和完整 Office 套件的正版 Windows。

    由于您的 rails 应用程序 WebDav 服务器,您将能够抛出错误(无法将该文件写入服务器)、对上传的文件/目录进行后处理以及进行任何记账您需要(您拥有用户的帐户,以及他们上传的内容)。 Dav4rack 很不错。您可以使用实际的文件系统作为后端或数据库,或将上传的文件反弹到 S3,或者您可以在 ruby​​ 中执行的任何操作。

    我认为此解决方案无法解决您的“递归查找与文件模式匹配的所有文件”组件以及 Air 应用程序可以解决的问题。如果没有实际经验,我想模式匹配会在上传完成后发生(可能带宽效率低下)。

    【讨论】:

    • 你真的想要这个赏金,杰里米,哈哈。不确定我对 WedDav 的看法,但感谢分享。当 Q 对我很重要时,我会添加赏金以尝试获得尽可能多的角度。您将获得 adobe AIR 答案。再次感谢。
    • 我公司一直在考虑上传工具。我制作了一个作为直接推送到 S3(不是 Air 应用程序)的 rails 应用程序的一部分,但事实证明这有很多怪癖。我们得到了它的工作,但只有silverlight。 Flash 无法获取上传进度,文件损坏存在一些问题。 HTML5 失败了,HTML4 有点工作没有进展,我认为它需要自定义标题。它已经到了我几乎觉得直接到 S3 还没有准备好投入生产的地步。我一直在考虑重新设计并构建更多 Air 应用程序,但这是我的下一个项目!
    猜你喜欢
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2018-06-14
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多