2010-08-30 36 views
1

我的Grails應用程序在文件夾中生成文件(例如「輸出」)。 我怎樣才能讓該文件夾公開,以便通過URL來揭露輸出文件,如:如何在Grails上公開目錄?

http://localhost:8080/MyGrailsApp/output/myOutputFile1.xml 
http://localhost:8080/MyGrailsApp/output/myOutputFile2.xml 

乾杯!

回答

0

此代碼是不完美的或測試,只需鍵入它在這裏,但它應該讓你在正確的方向

創建一個名爲OutputController控制器領導。常規

def viewFile = { 

    // add checks to ensure fileName parameter has no "/" or ".." to 
    // prevent directory transversal 

    def file = new File(OUTPUT_FILE_PATH + params?.fileName) 

    if (file.exists()) { 
     render(text: file.newInputStream().text, contentType: "text/plain", 
         encoding: "UTF-8") 
    } else { 
     render "FILE NOT FOUND: ${params?.fileName}" 
    } 
} 

更新URL映射文件

mappings { 
    "/output/$fileName?" { 
     controller = "output" 
     action = "viewFile" 
    } 
} 
+0

我擔心這可能導致目錄遍歷公關oblems http://en.wikipedia.org/wiki/Directory_traversal – Sammyrulez 2010-08-31 07:55:03

+0

我在這裏寫了「基本」代碼來表達這個觀點......是的,需要對傳入的參數進行驗證以確保類似這不會發生 – 2010-08-31 11:15:48

+0

這正是我所需要的。謝謝!我可以定義驗證字符串以防止「../」技巧 – Mulone 2010-08-31 11:19:54

1

有兩種方法可以做到這一點。首先閱讀你的應用程序服務器的文檔,並在你的xml文件存儲在任何目錄上啓用目錄列表。如果你需要與應用程序服務器無關,第二個選項可能是創建一個簡單的控制器,使用URL映射來自動加載並返回請求的文件。對於Grails的文件和URL映射的例子看 http://www.grails.org/URL+mapping