2009-04-13 173 views
2

我有一個Struts 1 web應用程序,需要將相當大的文件(> 50 MBytes)從客戶端上傳到服務器。我目前使用其內置的org.apache.struts.upload.DiskMultipartRequestHandler來處理HTTP POST multipart/form-data請求。它工作正常,但速度非常慢,上傳速度約爲每秒100千字節。Struts上傳速度較慢

將相同的大文件從服務器下載到客戶端的速度要快10倍以上。我不認爲這只是我的ISP的上傳和下載速度之間的差異,因爲使用簡單的FTP客戶端將文件傳輸到同一臺服務器的時間不到三分之一。

我已經着眼於用新的org.apache.commons.fileupload包替換內置的DiskMultipartRequestHandler,但我不確定如何修改它以創建Struts 1需要的MultipartRequestHandler。

Barend下面評論說,有一個'bufferSize'參數可以在web.xml中設置。我將緩衝區的大小增加到了100 KB,但並未提高性能。看看DiskMultipartRequestHandler的實現,我懷疑它的性能可能是有限的,因爲它一次讀取一個字節的流,查找多部分邊界字符。

是否有其他人使用Struts上傳大文件?

有沒有人定製了Struts 1提供的默認DiskMultipartRequestHandler?

我是否需要在上傳大文件時更耐心呢? :-)

回答

2

Apache wiki上的頁面StrutsFileUpload包含一組您可以使用的配置設置。一個突出的我是4096字節的默認緩衝區大小。如果還沒有,請嘗試將其設置爲更大的值(但不要將每個上傳的緩衝區分配得過大)。 2MB的值似乎是合理的。我懷疑這會大大提高上傳速度。

+0

這是一個好主意!之前我沒有注意到。謝謝!不幸的是,我現在剛剛嘗試過,並沒有真正改變。 – 2009-04-14 13:59:31

1

使用Apache Commons, 這給上傳文件提供了更大的靈活性。我們可以配置上傳文件大小(最大文件大小)和用於交換文件的臨時文件位置(這可以提高性能)。 請訪問此鏈接http://commons.apache.org/fileupload/using.html

+0

我發現這個實現更加靈活,甚至可以在決定將其存儲到磁盤之前保留整個上載內存。但是,它會影響非常大(> 50 MBytes)的文件嗎? – 2009-04-16 14:17:02