我正在开发一个应用程序,需要下载一些外部资源,并通过Ring中的
然而,在我的应用程序中保存资源到静态目录时遇到了问题,当我在开发中使用
我在我的Leiningen项目中添加了
如果我从REPL启动Jetty并使用
我尝试添加一个中间件包装器来确定上下文路径,并从那里构建正确的保存路径,但我找不到任何访问
这是包装器:
public/static
目录进行访问。然而,在我的应用程序中保存资源到静态目录时遇到了问题,当我在开发中使用
ring-jetty-adapter
时;测试和生产服务器运行Tomcat。我在我的Leiningen项目中添加了
:web-content"public"
,并在项目根目录下添加了public
目录,然后编写了一个使用http-agent和duck-streams的下载函数:(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时,它会在Tomcat根目录下查找public
目录,而不是应用程序上下文路径下。我尝试添加一个中间件包装器来确定上下文路径,并从那里构建正确的保存路径,但我找不到任何访问
HttpServlet
或确定应用程序是否在适配器中运行或是否在特定上下文中部署的方法。这是包装器:
(defn wrap-context-info [handler]
(fn [req]
(let [resp (handler req)]
(assoc resp :servlet (:servlet req) :req (:servlet-request req)))))
两者 :servlet
和 :req
都是 nil
。