2010-02-16 74 views
4

我有一個用戶通過rails web應用程序使用的ruby應用程序。如何將大文件上傳到rails應用程序?

使用的情況下,我需要解決的是:每個用戶都需要編譯創建通過Web頁面數據庫中的一個實體,把一個真正的大附件(可100gigs以上也行)與實體相關的。

現在,這是太大了,通過正常上傳插件來處理,我正在尋找一種方式來解決這個問題,我的想法是: - 通過http委託上傳backgroundrb - 開發一個GTK圖形用戶界面和出貨給用戶做上傳

其他提示或想法?

感謝

回答

1

如果它> 100GB,你或許應該使用某種類型的上傳管理器。如果你的網絡速度足夠快,你可以建立一個信任的小程序來與服務器通信。受信任的applet將具有完整的文件權限,因此它可以像獨立應用程序一樣工作。通過這種方式,您可以避免需要爲文件傳輸分發單獨的實用程序。

或者,您可以在Web上生成一些令牌,然後讓用戶使用具有給定令牌的獨立應用程序上載其文件。

+0

好主意,你能指點我已經開發和使用的開源解決方案嗎? – antani

+0

谷歌指向我的跳轉者,但我不知道它是否是開源的。我知道某些頻段已經利用類似的工具向最終用戶傳輸無損音頻(> 200MB),所以我認爲這是相似的。一旦你意識到你只是在編寫一個客戶端/服務器java應用程序,但是你想要找到庫或工具來允許文件恢復,實際上傳輸文件很容易。 Jumploader設備支持這一點。 –

+0

http://jumploader.com/demo.html 該演示看起來很有前途。 –

0

通過上傳你的web應用100GB的文件將不會很好。該上載將佔用您的Web服務器上傳文件所需的時間,使其他人無法訪問該文件。

我會考慮使用FTP或者甚至讓用戶upload directly to S3來代替,然後從那裏管理文件,因爲我認爲你必須將這些文件存儲在任何地方。

+0

不,S3不可能是解決方案,因爲數據真的是保密的。 由於其他原因,FTP不是解決方案。 – antani

+0

還有什麼其他原因? SFTP或SCP會工作嗎? – Matthew

1

通過Web界面傳輸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

1

這些傢伙有上傳大文件的一些很好的信息。也許這將有助於: http://tinyw.in/67ZF

他們有點經歷他們解決問題的過程以及他們一路走來的步驟。值得一看。

相關問題