Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defn upload-chunked
- [params]
- (let [headers (:headers params)
- content-range (rest (re-matches #"(\d+)-(\d+)\/(\d+)" (get headers "content-range")))
- content-length (parse-int (get headers "content-length"))
- [start end total] (map parse-int content-range)
- body-stream (:body params)
- file-name (get headers "x-file-name" "")
- hash (sha1-str (str file-name total))
- dest-path (files/file-path (uploads-path) (files/make-new-name hash file-name))
- file (io/file dest-path)
- file-size (.length file)
- stream (io/output-stream dest-path :append true)]
- (if (= (+ 1 end) file-size)
- (do
- (dispose-stream stream)
- (response/created (result/success)))
- (if (not (= start file-size))
- (do
- (dispose-stream stream)
- (io/delete-file dest-path true)
- (response/bad-request (result/failure "start != file-size")))
- (try
- (io/copy body-stream stream)
- (if (>= (+ start content-length) total)
- (do
- (dispose-stream stream)
- (response/ok (result/success)))
- (response/created))
- (catch Exception e
- (dispose-stream stream)
- (response/bad-request (result/failure "Chunked upload has failed!"))))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement