detect empty file upload submissions, show file operation result messages

This commit is contained in:
Gered 2013-05-26 14:51:34 -04:00
parent d3bd3342c9
commit 6b1627196c
2 changed files with 41 additions and 19 deletions

View file

@ -5,7 +5,12 @@
[blarg.util])
(:require [blarg.views.layout :as layout]
[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]
(let [p (ensure-prefix-suffix path "/")]
@ -13,26 +18,33 @@
"files/list.html" {:html-title (->html-title [(str "Files in " p)])
:path 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]
(let [p (ensure-prefix-suffix path "/")
filename (:filename file)
(if (valid-upload? file)
(let [filename (:filename file)
tempfile (:tempfile file)
content-type (:content-type file)
id (str p filename)
id (str path filename)
exists? (files/file-exists? id)]
(if-let [savedfile (if exists?
(files/update-file id tempfile content-type)
(files/add-file p filename tempfile content-type))]
(resp/redirect (str "/listfiles" p))
(throw (Exception. "Error uploading file")))))
(files/add-file path filename tempfile content-type))]
(do
(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]
(let [id (ensure-prefix file "/")]
(if-let [deleted (files/delete-file file)]
(resp/redirect "/listfiles")
(throw (Exception. "Error deleting file")))))
(session/flash-put! :file-success "File was deleted successfully.")
(session/flash-put! :file-error "File could not be deleted."))
(resp/redirect "/listfiles"))
(defn get-file [path]
(if-let [file (files/get-file path)]
@ -42,6 +54,6 @@
(defroutes files-routes
(restricted GET "/listfiles" [] (list-files "/"))
(restricted GET "/listfiles/*" [*] (list-files *))
(restricted POST "/uploadfile" [path file] (handle-new-file path file))
(restricted POST "/deletefile" [file] (handle-delete-file file))
(restricted POST "/uploadfile" [path file] (handle-new-file (ensure-prefix-suffix path "/") file))
(restricted POST "/deletefile" [file] (handle-delete-file (ensure-prefix file "/")))
(GET "/files/*" [*] (get-file *)))

View file

@ -6,6 +6,16 @@
<h2>Index of {{path}}</h2>
</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 class="pull-left form-inline">
<select id="tree">