下载文件而不是在浏览器中显示
File is downloaded instead of being displayed in the browser
我使用 lein new luminus my-app +postgres +auth +cljs +swagger
从 luminus 应用程序模板创建了一个全新的应用程序。在生成的文件 src/clj/my_app/routes/home.clj
中创建了以下 compojure 路由:
(GET "/docs" [] (response/ok (-> "docs/docs.md" io/resource slurp)))
当我尝试访问 localhost:3000/docs
时,文件只是下载而不是显示在浏览器中。 Chrome 和 Safari 都会发生这种情况。
它似乎与 ring.util.http-response/ok
有关,因为我也可以使用这条路线重现该行为:
(GET "/hi" [] (response/ok "hi"))
.
然后下载文件 "hi",文件内容为 "hi"。
对造成这种情况的原因有什么想法吗?
您的响应处理程序没有为您的响应设置 Content-Type
body。
您可以使用 ring.util.http-response/content-type
:
(GET "/hi" [] (-> "hi"
(response/ok)
(response/content-type "text/plain")))
您还可以将处理程序包装在 ring.middleware.content-type/wrap-content-type
中,这样 headers 就是 "guessed" 基于 URI 的文件扩展名。
我使用 lein new luminus my-app +postgres +auth +cljs +swagger
从 luminus 应用程序模板创建了一个全新的应用程序。在生成的文件 src/clj/my_app/routes/home.clj
中创建了以下 compojure 路由:
(GET "/docs" [] (response/ok (-> "docs/docs.md" io/resource slurp)))
当我尝试访问 localhost:3000/docs
时,文件只是下载而不是显示在浏览器中。 Chrome 和 Safari 都会发生这种情况。
它似乎与 ring.util.http-response/ok
有关,因为我也可以使用这条路线重现该行为:
(GET "/hi" [] (response/ok "hi"))
.
然后下载文件 "hi",文件内容为 "hi"。
对造成这种情况的原因有什么想法吗?
您的响应处理程序没有为您的响应设置 Content-Type
body。
您可以使用 ring.util.http-response/content-type
:
(GET "/hi" [] (-> "hi"
(response/ok)
(response/content-type "text/plain")))
您还可以将处理程序包装在 ring.middleware.content-type/wrap-content-type
中,这样 headers 就是 "guessed" 基于 URI 的文件扩展名。