如何将大文件上传到rails应用程序?

时间:2010-02-16 18:16:25

标签: ruby-on-rails ruby

我有一个ruby应用程序,用户通过rails web app使用它。

我需要解决的用例是:每个用户都需要通过网页编译在数据库上创建一个实体,并放置一个与实体相关的非常大的附件(也可以是100gig或更多)。

现在这个太大了,无法通过普通的上传插件处理,我正在寻找解决这个问题的方法,我的想法是: - 通过http委托上传到backgroundrb - 开发GTK gui并将其发送给用户进行上传

任何其他提示或想法?

感谢

4 个答案:

答案 0 :(得分:1)

如果大于100GB,您可能应该使用某种上传管理器。如果您的网络速度足够快,您可以构建一个受信任的applet来与服务器通信。受信任的applet具有完整的文件权限,因此它就像独立的应用程序一样工作。通过这种方式,您可以避免为文件传输分发单独的实用程序。

或者,您可以在Web上生成一些令牌,然后让用户使用带有给定令牌的独立应用程序上传其文件。

答案 1 :(得分:1)

通过网络界面传输100GB让我感到畏缩。编写/使用独立应用程序进行传输会好得多。

如果您已经在使用Ruby,那么您可以编写一个基于Ruby的应用程序,通过FTP上传。例如:

require 'net/ftp'

Net::FTP.open('uploads.yoursite.com','username','password') {|ftp|
    ftp.login('username','password')
    ftp.put 'filename'
    if (ftp.last_response != "266 Transfer complete.\n")
        puts "Error with FTP upload\nResponse was: #{ftp.last_response}"
    end
}

我使用此代码将自动生成的数据文件上传到另一台存档它们的服务器。在Ruby中有几个不同的库用于构建简单的用户界面,您只需要一个简单的窗口,用户可以输入用户名和密码,选择要上传的文件,然后单击“开始”按钮。

Ruby SSH库可以通过SFTP进行安全的文件传输(提示:require 'net/sftp')。我自己没有使用它,但the docs使它看起来像FTP一样简单。 IIRC,SFTP原本支持恢复中断的转移。

您还可以使用WinSCP之类的实用程序,这是一个可以使用FTP,SFTP或SCP上传的开源工具。对于非Windows系统,OS X为Cyberduck,Linux为KasablankagFTP

答案 2 :(得分:1)

这些人在上传大文件方面有一些很好的信息。也许这会有所帮助: http://tinyw.in/67ZF

他们有点经历他们解决问题的过程以及他们沿途采取的步骤。值得一看。

答案 3 :(得分:0)

通过您的webapp上传100GB文件不是很好。该上传将占用您的Web服务器上传文件所需的时间,使其他人无法访问。

我会考虑使用FTP或者甚至让您的用户upload directly to S3,然后从那里管理文件,因为我认为您必须将这些文件存储在某处。