2010-02-28 16 views
3

我有一個基於某些客戶端動作動態生成文件的Spring Web MVC應用程序(以及一個BlazeDS應用程序,雖然不相關)。從Spring MVC流式處理動態文件

我想只將文件系統上的某個目錄映射到Spring MVC(或應用服務器)url,並讓它服務於該目錄中的文件(通過流和標準的最後修改頭支持)。理想情況下,映射目錄將通過spring配置進行配置,因爲我已經爲每臺機器設置了支持。

那麼,我該怎麼做呢?目前我能找到的最好的方法是編寫一個控制器,手動讀取文件並逐字節地傳輸它。但是,這似乎遠不如理想。是否已經支持Spring MVC或標準應用服務器規範?

謝謝!

回答

1

<Context docBase="/path/to/your/resources" path="/resources" /> 

這樣,他們就可以訪問如果處理模型支持的話,爲什麼不砍的中間人文件系統完全脫離圖片,只是通過響應流在文件系統生成時將文件流回來?看一看Spring MVC的AbstractExcelView和AbstractPDFView類,看看如何完成這個過程的一些例子。

+0

謝謝。這一代需要很長的時間(大約10秒鐘)才能實時生成。但是,我可能能夠從這些源派生我自己的AbstractStreamingFileView。 – zpinter 2010-03-01 01:23:38

0

理想的是在應用服務器前面使用一個輕量級的代理服務器,就像nginx或lighthttpd一樣。您可以將其配置爲提供靜態內容,而無需調用您的應用程序。

如果目錄和文件如此動態,則可以在控制器上準備實際的文件路徑,並使用標題將此文件路徑提供給前端服務器。例如,對於nginx,它是一個X-Accel-Redirect標題。瞭解更多關於這個(並按照其他HTTP服務器的鏈接)there

+0

這當然是一種選擇,但是,像BalusC的tomcat選項一樣,我認爲這很難以易於在開發環境和服務器上工作的方式進行集成。 – zpinter 2010-03-01 01:25:11

+0

對於開發環境,您可以使用字節到字節的輸出,您可以輕鬆地爲此創建一個控制器。但是,當部署在生產服務器上時,您可以將此控制器配置爲只有標題的輸出。 – 2010-03-01 07:45:35

1

或標準的應用服務器規範呢?

是的,有。因爲你沒有提到你正在使用哪一個,我會給出一個Tomcat的答案。所有你基本上需要做的是在/conf/server.xml添加Context元素/path/to/your/resources:通過http://example.com/resources/...

+0

這可能會起作用......但是,我認爲很難在我的spring配置中整合目錄的位置,以便通過Eclipse部署,構建腳本和本地開發人員計算機。 – zpinter 2010-03-01 01:24:31