1. 程式人生 > >Play1.2.4 實現專案檔案和上傳檔案分離

Play1.2.4 實現專案檔案和上傳檔案分離

專案現狀:   兩臺伺服器通過nfs共享public目錄, public 目錄存js,css ,圖片等檔案,這部分檔案經常有增加,更新的需求,偶爾有刪除的需求,其實並沒有執行過刪除操作,不想更新部分檔案時,就會將整個public更新到伺服器上去,雖然花費時間長,但是十分省事。 使用者上傳的檔案儲存在public/upload 目錄下, 通過  aaa.com/public/   來訪問專案的靜態資源。 

關於 upload 目錄的一些限制, 

1: 有時我想刪除整個public,然後重新上傳,但是由於upload的存在,不管public存在多少多餘的檔案,我都不敢刪除public。

2: 上傳整個public目錄時,總擔心 upload 目錄的檔案被本地測試檔案替換,雖然本地upload和線上upload 存在同名檔案的概率很小。

3: 關於把專案名稱改改,部署到另外一個目錄,或者新增一個例項的想法都不敢有,操作起來太麻煩。如果是使用tomcat來進行部署更是一種災難。

/opt/xfyh/apache-tomcat-7.0.94/webapps/ROOT/WEB-INF/application/public/upload。  雖然我知道你可能會說 tomcat 和 war 分離

 

<Context path="" docBase="/usr/local/tomcat-f/war/app.war"></Context> ,但是前面兩個問題還是會存在。

因此將專案檔案和使用者上傳檔案分離開還是十分必要的。  解決辦法也無非就是將upload 目錄移到專案外面去, 具體做法如下:

1:   配置 routes 檔案

將所有的 /upload/xxx 請求mapping 到  UploadController.index  上面去。 

 

2: UploadController.index 處理邏輯如下,主要在於找到檔案的絕對路徑。

 

3: 上傳檔案時的處理:  將tmp目錄的檔案 copy 到  uploadPath 目錄中去及可。 

 

相應的spring的解決方案: 

 

想比較而言 spirng 的解決方案更加靈活,因為spring的解決方案能新增任意多個靜態資源目錄。

關於其他play的不足之處:

1: 需要程式設計師手動的刪除檔案