detect empty file upload submissions, show file operation result messages
This commit is contained in:
parent
d3bd3342c9
commit
6b1627196c
|
@ -5,7 +5,12 @@
|
||||||
[blarg.util])
|
[blarg.util])
|
||||||
(:require [blarg.views.layout :as layout]
|
(:require [blarg.views.layout :as layout]
|
||||||
[blarg.models.files :as files]
|
[blarg.models.files :as files]
|
||||||
[noir.response :as resp]))
|
[noir.response :as resp]
|
||||||
|
[noir.session :as session]))
|
||||||
|
|
||||||
|
(defn valid-upload? [file]
|
||||||
|
(and (not (nil? file))
|
||||||
|
(not-empty (:filename file))))
|
||||||
|
|
||||||
(defn list-files [path]
|
(defn list-files [path]
|
||||||
(let [p (ensure-prefix-suffix path "/")]
|
(let [p (ensure-prefix-suffix path "/")]
|
||||||
|
@ -13,26 +18,33 @@
|
||||||
"files/list.html" {:html-title (->html-title [(str "Files in " p)])
|
"files/list.html" {:html-title (->html-title [(str "Files in " p)])
|
||||||
:path p
|
:path p
|
||||||
:files (files/list-files p)
|
:files (files/list-files p)
|
||||||
:tree (files/get-tree)})))
|
:tree (files/get-tree)
|
||||||
|
:error (session/flash-get :file-error)
|
||||||
|
:success (session/flash-get :file-success)
|
||||||
|
:notice (session/flash-get :file-notice)})))
|
||||||
|
|
||||||
(defn handle-new-file [path file]
|
(defn handle-new-file [path file]
|
||||||
(let [p (ensure-prefix-suffix path "/")
|
(if (valid-upload? file)
|
||||||
filename (:filename file)
|
(let [filename (:filename file)
|
||||||
tempfile (:tempfile file)
|
tempfile (:tempfile file)
|
||||||
content-type (:content-type file)
|
content-type (:content-type file)
|
||||||
id (str p filename)
|
id (str path filename)
|
||||||
exists? (files/file-exists? id)]
|
exists? (files/file-exists? id)]
|
||||||
(if-let [savedfile (if exists?
|
(if-let [savedfile (if exists?
|
||||||
(files/update-file id tempfile content-type)
|
(files/update-file id tempfile content-type)
|
||||||
(files/add-file p filename tempfile content-type))]
|
(files/add-file path filename tempfile content-type))]
|
||||||
(resp/redirect (str "/listfiles" p))
|
(do
|
||||||
(throw (Exception. "Error uploading file")))))
|
(session/flash-put! :file-success "File uploaded successfully.")
|
||||||
|
(session/flash-put! :file-notice "Existing file with the same name was updated with the uploaded file."))
|
||||||
|
(session/flash-put! :file-error "File could not be uploaded.")))
|
||||||
|
(session/flash-put! :file-error "No file selected to upload."))
|
||||||
|
(resp/redirect (str "/listfiles" path)))
|
||||||
|
|
||||||
(defn handle-delete-file [file]
|
(defn handle-delete-file [file]
|
||||||
(let [id (ensure-prefix file "/")]
|
(if-let [deleted (files/delete-file file)]
|
||||||
(if-let [deleted (files/delete-file file)]
|
(session/flash-put! :file-success "File was deleted successfully.")
|
||||||
(resp/redirect "/listfiles")
|
(session/flash-put! :file-error "File could not be deleted."))
|
||||||
(throw (Exception. "Error deleting file")))))
|
(resp/redirect "/listfiles"))
|
||||||
|
|
||||||
(defn get-file [path]
|
(defn get-file [path]
|
||||||
(if-let [file (files/get-file path)]
|
(if-let [file (files/get-file path)]
|
||||||
|
@ -42,6 +54,6 @@
|
||||||
(defroutes files-routes
|
(defroutes files-routes
|
||||||
(restricted GET "/listfiles" [] (list-files "/"))
|
(restricted GET "/listfiles" [] (list-files "/"))
|
||||||
(restricted GET "/listfiles/*" [*] (list-files *))
|
(restricted GET "/listfiles/*" [*] (list-files *))
|
||||||
(restricted POST "/uploadfile" [path file] (handle-new-file path file))
|
(restricted POST "/uploadfile" [path file] (handle-new-file (ensure-prefix-suffix path "/") file))
|
||||||
(restricted POST "/deletefile" [file] (handle-delete-file file))
|
(restricted POST "/deletefile" [file] (handle-delete-file (ensure-prefix file "/")))
|
||||||
(GET "/files/*" [*] (get-file *)))
|
(GET "/files/*" [*] (get-file *)))
|
||||||
|
|
|
@ -6,6 +6,16 @@
|
||||||
<h2>Index of {{path}}</h2>
|
<h2>Index of {{path}}</h2>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{% if success %}
|
||||||
|
<div class="alert alert-success">{{success}}</div>
|
||||||
|
{% endif %}
|
||||||
|
{% if error %}
|
||||||
|
<div class="alert alert-error">{{error}}</div>
|
||||||
|
{% endif %}
|
||||||
|
{% if notice %}
|
||||||
|
<div class="alert alert-info">{{notice}}</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<div class="pull-left form-inline">
|
<div class="pull-left form-inline">
|
||||||
<select id="tree">
|
<select id="tree">
|
||||||
|
|
Reference in a new issue