2

参照目的で、grails アプリケーションがローカルに保存された pdf ファイルにアクセスする必要があります。ローカル サーバー上のスポットへの絶対パスがあり、アプリは同じネットワーク上で実行されます。

ユーザーにファイル名をテキスト フィールドに入力してもらい (ユーザー エラーが発生する可能性があります)、それをデータベースに保存する方がよいかどうかはわかりません。次のように、パスに追加するためのリンクを作成できます。

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

しかし、ファイルが見つからず、404エラーが発生するため、これは機能していないようです

私が考えていたもう1つのことは、常にファイルがあるとは限らないため、ユーザーがファイルをアップロードする方が簡単かもしれないということです。これは良い方法かもしれませんが、ファイルをどこに保存すればよいかわかりません。Web アプリケーション ディレクトリにフォルダを作成し、そこにすべてのファイルを保存しますか?

ご意見をお寄せいただきありがとうございます。

4

1 に答える 1

2

リソース ディレクティブは Web アプリのルートに関連しているため、それ以外のものにはアクセスできないと思います。

常にサーバーがあるとは限らないという意味がわかりません。アプリが実行されるサーバーは常に存在します。データベースサーバーを意味する場合、技術的には正しいと思いますが、少なくともH2またはその他のインメモリデータベースをいつでも使用できます.

ドキュメントには、ファイルのアップロードに関するかなり良いセクションがあります。それに従って、アクセスできる任意のディレクトリにファイルを保存することができます-マップされた、ネットワークまたはローカル。おそらく、再デプロイ時に上書きしないように、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()
}
于 2012-05-24T01:13:55.480 に答える