我的Grails應用程序在文件夾中生成文件(例如「輸出」)。 我怎樣才能讓該文件夾公開,以便通過URL來揭露輸出文件,如:如何在Grails上公開目錄?
http://localhost:8080/MyGrailsApp/output/myOutputFile1.xml
http://localhost:8080/MyGrailsApp/output/myOutputFile2.xml
乾杯!
我的Grails應用程序在文件夾中生成文件(例如「輸出」)。 我怎樣才能讓該文件夾公開,以便通過URL來揭露輸出文件,如:如何在Grails上公開目錄?
http://localhost:8080/MyGrailsApp/output/myOutputFile1.xml
http://localhost:8080/MyGrailsApp/output/myOutputFile2.xml
乾杯!
此代碼是不完美的或測試,只需鍵入它在這裏,但它應該讓你在正確的方向
創建一個名爲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"
}
}
有兩種方法可以做到這一點。首先閱讀你的應用程序服務器的文檔,並在你的xml文件存儲在任何目錄上啓用目錄列表。如果你需要與應用程序服務器無關,第二個選項可能是創建一個簡單的控制器,使用URL映射來自動加載並返回請求的文件。對於Grails的文件和URL映射的例子看 http://www.grails.org/URL+mapping
我擔心這可能導致目錄遍歷公關oblems http://en.wikipedia.org/wiki/Directory_traversal – Sammyrulez 2010-08-31 07:55:03
我在這裏寫了「基本」代碼來表達這個觀點......是的,需要對傳入的參數進行驗證以確保類似這不會發生 – 2010-08-31 11:15:48
這正是我所需要的。謝謝!我可以定義驗證字符串以防止「../」技巧 – Mulone 2010-08-31 11:19:54