public/static
いくつかの外部リソースをダウンロードし、Ringのディレクトリからアクセスできるようにする必要があるアプリケーションに取り組んでいます。
しかし..アプリケーションの静的ディレクトリにリソースを保存する際に問題がありring-jetty-adapter
ます。テスト サーバーと運用サーバーは Tomcat を実行しています。
:web-content "public"
leiningen プロジェクトに追加し、プロジェクトpublic
のルートにディレクトリを追加すると、http-agent とダック ストリームを使用したダウンロード機能があります。
(defn download
[file-name url]
(h/http-agent url
:handler (fn [agnt]
(let [fname file-name]
(with-open [w (d/writer fname)]
(d/copy (h/stream agnt) w))))))
REPL から Jetty を起動して を使用するsavepath: "public/my.file"
と、ダウンロードしたファイルがディレクトリに正しく配置されますpublic
。しかし、.war
ファイルを使用して Tomcatにデプロイするとpublic
、アプリケーション コンテキスト パスの下ではなく、Tomcat ルート ディレクトリ内のディレクトリが検索されます。
HttpServlet
ミドルウェア ラッパーを追加してコンテキスト パスを特定し、そこから正しい保存パスを作成しようとしましたが、にアクセスする方法や、アプリケーションがアダプターで実行されているかどうか、またはアプリケーションが下にデプロイされているかどうかを判断する方法が見つかりません。特定のコンテキスト。
ここでラッパー:
(defn wrap-context-info [handler]
(fn [req]
(let [resp (handler req)]
(assoc resp :servlet (:servlet req) :req (:servlet-request req)))))
両方:servlet
とも:req
ですnil
。