2009-07-06 63 views
1

我知道這類問題存在於SF中,但它們非常具體,我需要一個通用的建議。我需要一個功能來上傳可能大於1 GB的用戶文件。該功能將成爲應用程序中現有文件上載功能的附加功能,可滿足較小文件的需求。現在,這裏有一些選項上傳非常大(> 1GB)文件的建議

  1. 使用HTTP和Java小程序。以塊的形式發送文件並將其加入服務器。但如何節制n/w。
  2. 使用HTTP和Flex應用程序。它是否比任何其他環境問題的瀏覽器兼容性好?
  3. 使用FTP或SFTP,而不是HTTP作爲實現更快的上傳過程

請提出的協議。

此外,我必須確保此上傳過程不會妨礙其他用戶的任務,換句話說,不要讓其他用戶的黑白圖片吃光。任何可以在n/w級別完成的機制來抑制這些過程?

最終客戶希望將FTP作爲選項。但我認爲編程處理文件的答案也很酷。

回答

0

要發送文件到服務器,除非你的使用HTTP,FTP是要走的路。節流,我不完全確定,至少不是以編程方式。

就個人而言,似乎上傳速度的限制將在服務器端更好地完成。

12

使用任何客戶端語言(Java應用程序,Flex等),並使用HTTP PUT(無Flex)或POST推送到服務器。在服務器端Java代碼中,調整輸入流循環中的字節流。粗,簡單,樣品限制帶寬不大於平均< = 10KB /秒更快片段:

InputStream is = request.getInputStream(); 
OutputStream os = new FileOutputStream(new File("myfile.bin")); 
int bytesRead = 0; 
byte[] payload = new byte[10240]; 

while (bytesRead >= 0) { 
    bytesRead = is.read(payload); 

    if (bytesRead > 0) 
     os.write(payload, 0, bytesRead); 

    Thread.currentThread().sleep(1000); 
} 

(隨着越來越複雜人們可以更準確地調節單個流的帶寬,但它得到複雜當考慮。套接字緩存和這樣的「足夠好」通常是足夠好)

我的應用程序與上述類似的東西 - 我們同時調節了(POSTPUT)和(GET)往下流的帶寬。我們每天接受100多MB的文件,並測試了2GB。 (超過2GB時,需要處理令人討厭的Java int原始問題。)我們的客戶端都是Flex和curl。它適用於我,它可以爲你工作。

儘管FTP很棒,但可以通過使用HTTP避免許多(但不是全部)防火牆問題。

3

如果你想減少帶寬,你可能想要發送壓縮的數據(除非它已經壓縮)這可能會節省2-3倍的數據量,這取決於你發送的內容。

1

有關上傳大文件的良好做法以及解決問題的各種方法的示例,請參閱flickr。com(您可能需要註冊才能進入上傳頁面)

它們提供各種選項,包括HTTP表單上傳,java桌面客戶端或某種JavaScript驅動的小工具,我無法弄清楚。他們似乎沒有在任何地方使用閃光燈。