Make image uploading more robust #1

This commit is contained in:
Aaron Fischer 2017-05-03 21:42:12 +02:00
parent 0d6662d093
commit 4b0a030caf
2 changed files with 20 additions and 15 deletions

View file

@ -6,6 +6,7 @@
[image-resizer.resize :refer :all] [image-resizer.resize :refer :all]
[image-resizer.scale-methods :refer :all] [image-resizer.scale-methods :refer :all]
[clojure.java.io :as io] [clojure.java.io :as io]
[clojure.string :as s]
[digest :as digest] [digest :as digest]
[me.raynes.fs :as fs] [me.raynes.fs :as fs]
[clj-exif-orientation.core :as exif] [clj-exif-orientation.core :as exif]
@ -31,7 +32,7 @@
(str (.lastModified file) "-" (digest/md5 file)))) (str (.lastModified file) "-" (digest/md5 file))))
(defn delete-image! [image-hash] (defn delete-image! [image-hash]
(run! #(fs/delete (data-path "gallery" % (str image-hash ".png"))) (run! #(fs/delete (data-path "gallery" % image-hash))
["normal" "raw" "thumbnails"])) ["normal" "raw" "thumbnails"]))
(defn scale-thumbnail [width] (defn scale-thumbnail [width]
@ -49,29 +50,33 @@
(defn scale-normal [width height] (defn scale-normal [width height]
(resize-fn width height ultra-quality)) (resize-fn width height ultra-quality))
(defn remove-metadata [filepath file]
(if (contains? #{".jpg" ".jpeg" ".jpe"} (s/lower-case (fs/extension filepath)))
(let [new-file (exif/without-exif file)]
(if (= (fs/size new-file) 0)
(do
(.delete new-file)
file)
new-file))
file))
(defn save [fn params filepath target-filepath] (defn save [fn params filepath target-filepath]
(let [file (exif/without-exif (io/file filepath))] (let [file (remove-metadata filepath (io/file filepath))]
(as-file ((apply fn params) file) (as-file ((apply fn params) file)
target-filepath target-filepath
:verbatim) :verbatim)
(fs/delete file))) (if (= (fs/extension file) ".tmp")
(fs/delete file))))
(defn scale-image-and-save [filepath] (defn scale-image-and-save [filepath]
(let [image-hash (target-image-filename filepath) (let [image-hash (target-image-filename filepath)
file-extension (fs/extension filepath) file-extension (fs/extension filepath)
new-file-name (str image-hash file-extension)] new-file-name (str image-hash file-extension)]
(fs/copy filepath (data-path "gallery" "raw" new-file-name)) (fs/copy filepath (data-path "gallery" "raw" new-file-name))
(try (do
(do (save scale-normal [1024 768] filepath (data-path "gallery" "normal" new-file-name))
(save scale-normal [1024 768] filepath (data-path "gallery" "normal" new-file-name)) (save scale-thumbnail [250] filepath (data-path "gallery" "thumbnails" new-file-name)))
(save scale-thumbnail [250] filepath (data-path "gallery" "thumbnails" new-file-name)))
(catch Exception e (prn e)))
new-file-name)) new-file-name))
(defn process-image [filepath]
(let [image-hash (scale-image-and-save filepath)]
;;;(fs/delete filepath)
image-hash))
(defn process-all-images [] (defn process-all-images []
(pmap process-image (fs/list-dir (data-path "to-process")))) (pmap scale-image-and-save (fs/list-dir (data-path "to-process"))))

View file

@ -68,7 +68,7 @@
{:flash (:flash request)}))) {:flash (:flash request)})))
(POST "/upload" [file title description tags] (POST "/upload" [file title description tags]
(-> (upload-file file) (-> (upload-file file)
(images/process-image) (images/scale-image-and-save)
(add-image-to-database title description tags)) (add-image-to-database title description tags))
(-> (redirect "/upload") (-> (redirect "/upload")
(assoc :flash {:message "Upload erfolgreich." :type "success"}))) (assoc :flash {:message "Upload erfolgreich." :type "success"})))