Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将文件夹和子文件夹中的文件上载到webapp_Ruby On Rails_Windows_Macos_File Upload_Desktop Application - Fatal编程技术网

Ruby on rails 将文件夹和子文件夹中的文件上载到webapp

Ruby on rails 将文件夹和子文件夹中的文件上载到webapp,ruby-on-rails,windows,macos,file-upload,desktop-application,Ruby On Rails,Windows,Macos,File Upload,Desktop Application,目标: 允许用户选择一个文件夹,然后递归查找与文件模式匹配的所有文件,并将其传输(POST)到我的web服务器 本质上只是一个更高级的上传对话框 afaik称,由于安全原因,标准web技术(我们使用的是plupload)不支持此功能 其他要求: 易于使用/从webapp安装。需要SSL和应用程序用户凭据。其他一些数据,比如记录ID(从web应用程序获取或创建)来关联上传文件会很好 web应用程序本身是用RubyonRails编写的,但如果我需要某种本机Mac和Windows(相当于我80%的用户

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

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

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

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

web应用程序本身是用RubyonRails编写的,但如果我需要某种本机Mac和Windows(相当于我80%的用户)桌面客户端,那么这并不重要

我有什么选择


代码和对开源libs的引用是一个额外的好处。

我将从以下内容开始构建一个客户端: 这样你就可以把它保存在ruby家族中。如果您需要友好的gui:
我建议创建一个AdobeAIR应用程序

您可以重用现有的plupload js代码,并使用AdobeAIR API对其进行扩展。理想情况下,它将是一个基本上是静态的应用程序,但需要通过服务器调用来创建策略文档,并在上载时执行任何您想要执行的簿记操作。在某一时刻达到顶峰。然后看看课堂

Flash有99.3%的渗透率,用户只需点击“安装我的上传程序”,air框架就会在需要时自动安装。Air也安装在Android和iDevices上,因此99.999%的用户和他们的妈妈都可以使用你的应用程序

我花了一分钟才找到,但这是答案

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

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);
    }
}
var directory=air.File.documents目录;
尝试
{
browseForDirectory(“选择目录”);
directory.addEventListener(air.Event.SELECT,directorySelected);
}
捕获(错误)
{
air.trace(“失败:”,错误消息)
}
已选择功能目录(事件)
{
directory=event.target;
var files=directory.getDirectoryListing();
对于(var i=0;i
我仍然认为AdobeAIR应用程序是解决您问题的可靠方法。提供简单的安装/更新,支持ssl,允许您完全控制用户体验,110%跨平台等。。。然而,如果你讨厌Adobe或编写UI代码,你有没有研究过WebDav/dav4rack gem

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

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

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

从扫描来看,它看起来像Win98中Windows支持的WebDav。然而,和其他每一个网络标准一样,微软决定,嗯,要有创造性。听起来,如果用户使用的是最新的KB892211、KB907306、Office、Internet Explorer、OLE-DB和/或“Microsoft Update for Web Folders”,他们应该能够轻松地通过SSL通过各种身份验证方案访问WebDav文件夹。我确信您的所有Windows用户都在使用正版Windows,并提供所有最新更新和完整的Office套件

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


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

这对普通用户不起作用。Ruby不一定安装,也不能向公众提供S3凭据。本质上,我只需要一个更高级的上传对话框“递归查找与文件模式匹配的所有文件”,比如,您是否尝试从文件夹上传所有PNG(但可能不是JPG)?你到底想处理什么?1:正确。第二:什么意思,什么文件类型?*。你真的想要这笔赏金,杰里米,哈哈。虽然不知道我对WedDav的看法,但谢谢分享。当一个Q对我来说非常重要时,我会加上赏金,尽可能多的角度。您将通过adobe AIR answer获得此奖励。再次感谢。我的公司一直在考虑上传工具。我制作了一个rails应用程序的一部分,它直接推送到S3(不是Air应用程序),但事实证明,它有很多怪癖。我们让它工作,但只有silverlight。Flash无法获得上载进度,存在一些文件损坏的问题。HTML5失败了,HTML4在没有进展的情况下工作了,我认为它需要自定义标题。我觉得S3还没有准备好投入生产。我一直在考虑改造一些东西,构建更多的Air应用程序,但这是我的下一个项目!