From 9cbd9b9edbbdaf7835bcf3e501bc9c0fbe90504d Mon Sep 17 00:00:00 2001 From: Tim Date: Mon, 21 Apr 2025 18:08:13 +0200 Subject: Add image view --- TODO.md | 2 +- deps.edn | 3 ++- src/pics/handler/view.clj | 46 ++++++++++++++++++++++++++++++++++++++++++++++ src/pics/routes.clj | 7 +++++-- 4 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 src/pics/handler/view.clj diff --git a/TODO.md b/TODO.md index e30311a..be56d26 100644 --- a/TODO.md +++ b/TODO.md @@ -1,5 +1,5 @@ # ToDo - [x] upload image -- [ ] view image +- [x] view image - [ ] delete image diff --git a/deps.edn b/deps.edn index 0094f30..82bac05 100644 --- a/deps.edn +++ b/deps.edn @@ -1,7 +1,8 @@ {:paths ["src"] :deps {http-kit/http-kit {:mvn/version "2.8.0"} metosin/reitit {:mvn/version "0.8.0"} - lynxeyes/dotenv {:mvn/version "1.1.0"}} + lynxeyes/dotenv {:mvn/version "1.1.0"} + hiccup/hiccup {:mvn/version "2.0.0-RC5"}} :aliases {:neil {:project {:name pics/pics :version "0.0.1"}} diff --git a/src/pics/handler/view.clj b/src/pics/handler/view.clj new file mode 100644 index 0000000..34ee712 --- /dev/null +++ b/src/pics/handler/view.clj @@ -0,0 +1,46 @@ +(ns pics.handler.view + (:require [clojure.string :as cstr] + [ring.util.response :as ruresp] + [hiccup2.core :as hiccup]) + (:import java.io.File + java.util.Date + (java.text SimpleDateFormat))) + +(defn handle-src [req] + (->> (get-in req [:reitit.core/match :path-params :file-name]) + (str "./img/") + ruresp/file-response)) + +(defn handle [req] + (let [file (->> (.listFiles (File. "./img/")) + (filter #(cstr/starts-with? (.getName ^File %) + (str (get-in req [:reitit.core/match :path-params :id]) "."))) + first)] + (if (some? file) + (-> [:html + [:head + [:title "pics"] + [:meta {:name "robots" :content "noindex,nofollow"}]] + [:body {:style {:background-color :aquamarine}} + [:img {:src (str "/src/" (.getName ^File file)) + :style {:max-height "90%" + :max-width "90%" + :border-radius "1em" + :display :block + :margin :auto}}] + (let [last-modified (Date. (.lastModified ^File file)) + date-format (SimpleDateFormat. "dd.MM.yyyy")] + [:div {:style {:position :fixed + :bottom 0 + :text-align :center + :width "100%"}} + [:p {:style {:font-family "Arial, sans-serif" + :background-color :white + :border-radius "1em" + :display :inline-block + :padding "0.3em"}} + (str "Uploaded on " (.format date-format last-modified))]])]] + hiccup/html + str + ruresp/response) + (ruresp/not-found "Not found.")))) diff --git a/src/pics/routes.clj b/src/pics/routes.clj index a10ab95..31edd63 100644 --- a/src/pics/routes.clj +++ b/src/pics/routes.clj @@ -3,11 +3,14 @@ [ring.middleware.multipart-params :as rmmultiparams] [pics.handler.home :as phhome] - [pics.handler.upload :as phupload])) + [pics.handler.upload :as phupload] + [pics.handler.view :as phview])) (def ^:private router (rring/router [["/" {:get {:handler phhome/handle}}] - ["/upload" {:post {:handler phupload/handle}}]])) + ["/api/upload" {:post {:handler phupload/handle}}] + ["/src/:file-name" {:get {:handler phview/handle-src}}] + ["/:id" {:get {:handler phview/handle}}]])) (def ring-handler (-> router -- cgit v1.2.3