2012-05-23 36 views
2

我需要讓我的grails應用程序訪問本地存儲的pdf文件以供參考。我有一個絕對路徑到本地服務器上的一個點,並且該應用程序將運行在同一個網絡上。從我的Grails應用程序訪問本地存儲的文件?

我不知道是否最好讓用戶輸入文件名到文本字段(受用戶錯誤),然後將其存儲在數據庫中,然後我可以創建一個鏈接將其附加到路徑爲:但這似乎

<a href="${resource(dir:'/serverName/locationName/pdfs',file:'FILENAME_with_Ext.pdf')}" target="_new">pdfFile</a> 

不工作,因爲它不會找到該文件,我得到一個404錯誤

我在想另一件事是,它可能會更容易讓用戶上傳文件(如果有的話),因爲可能並不總是有文件。我認爲這可能是更好的方法,但我不知道我會在哪裏存儲文件。我會在Web應用程序目錄中創建一個文件夾並將所有文件存儲在那裏?

感謝您的任何意見和建議。

回答

2

資源指令是相對於Web應用程序的根,所以我不認爲它將能夠訪問任何東西之外。

我不確定你的意思可能並不總是一個服務器 - 總是有一個應用程序運行的服務器。如果你的意思是數據庫服務器,我想這在技術上是正確的,儘管你至少可以使用H2或其他內存數據庫。

docs有一個很不錯的文件上傳部分。你可以關注它,並將它保存到你有權訪問的任何目錄 - 映射或網絡或本地。可能最好在Web應用程序之外執行此操作,以便在重新部署時不會覆蓋。保存文件名和任何描述你需要顯示用戶。

然後訪問你可能需要在你的web服務器(tomcat等)中設置某種別名。因此,可以說你/var/myWebApp/uploads存儲的文檔,然後創建與Web服務器設置別名,這樣/uploads//var/myWebApp/uploads,服務起來爲http://www.myserver.com/uploads/uploaded.pdf

我不知道你有什麼安全問題了這個網站,但你如果您擔心人們正在瀏覽上傳目錄,並且不允許該目錄將其自身顯示爲索引並列出其包含的文件,則可能需要對文件名進行混淆。

編輯

非常基本的例子

//class 
class MyClass { 
    String fileDescription 
    byte[] fileDocument 
} 

//form 
<g:uploadForm action="save"> 
    Description <g:textField name="fileDescription" /> 
    <input type="file" name="fileDocument" /> 
    <input type="submit" 
</g:uploadForm> 

//controller 
def save = { 
    def myClass = new MyClass(params) 
    myClass.save() 
} 
+0

我猜 「並不一定會成爲一個服務器」 指的是PDF文件。 [晃動分詞!](http://www.youtube.com/watch?v=N4vf8N6GpdM) –

+0

正確,不會有一個文件。 – Universitas

+0

理解 - 我認爲這更重要的是要做上傳。我認爲最終用戶讓他們從文件列表中選擇,或者自動填充而不是讓他們輸入文件名然後查找文件看起來好多了。消除一些用戶的挫折感,並且他們看到更少的「我們找不到你想要的東西」的消息。 – Kelly

相關問題