From b1cfb5490acfc4040ea189a5ca24cffaf26a9d21 Mon Sep 17 00:00:00 2001 From: Juha Jokimaki Date: Mon, 31 Oct 2016 08:45:00 +0200 Subject: [PATCH 1/2] Set GridFSInputFile closeStreamOnPersist flag --- src/clojure/monger/gridfs.clj | 2 +- test/monger/test/gridfs_test.clj | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/clojure/monger/gridfs.clj b/src/clojure/monger/gridfs.clj index 9358f29..63adf55 100644 --- a/src/clojure/monger/gridfs.clj +++ b/src/clojure/monger/gridfs.clj @@ -116,7 +116,7 @@ (defn ^GridFSInputFile make-input-file [^GridFS fs input] - (.createFile fs (to-input-stream input))) + (.createFile fs (to-input-stream input) true)) (defmacro store [^GridFSInputFile input & body] diff --git a/test/monger/test/gridfs_test.clj b/test/monger/test/gridfs_test.clj index e6c60e9..de632d0 100644 --- a/test/monger/test/gridfs_test.clj +++ b/test/monger/test/gridfs_test.clj @@ -78,6 +78,16 @@ (content-type "application/octet-stream")) (is (= 1 (count (gridfs/all-files fs)))))) + (deftest ^{:gridfs true} test-deleting-file-instance-on-disk-after-storing + (let [tmp-file (File/createTempFile "monger.test.gridfs" "test-deleting-file-instance-on-disk-after-storing") + _ (spit tmp-file "to be deleted")] + (is (= 0 (count (gridfs/all-files fs)))) + (store-file (make-input-file fs tmp-file) + (filename "test-deleting-file-instance-on-disk-after-storing") + (content-type "application/octet-stream")) + (is (= 1 (count (gridfs/all-files fs)))) + (is (.delete tmp-file)))) + (deftest ^{:gridfs true} test-finding-individual-files-on-gridfs From 1170f342ddbacfbf7d3888f8101a93a011b42469 Mon Sep 17 00:00:00 2001 From: Juha Jokimaki Date: Sun, 20 Nov 2016 18:03:11 +0200 Subject: [PATCH 2/2] Delegate stream creation to GridFS --- src/clojure/monger/gridfs.clj | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/clojure/monger/gridfs.clj b/src/clojure/monger/gridfs.clj index 63adf55..a3f60f9 100644 --- a/src/clojure/monger/gridfs.clj +++ b/src/clojure/monger/gridfs.clj @@ -114,9 +114,30 @@ (to-input-stream [^InputStream input] input)) +(defprotocol GridFSInputFileFactory + (^GridFSInputFile create-gridfs-file [input ^GridFS fs] "Creates a file entry")) + +(extend byte-array-type + GridFSInputFileFactory + {:create-gridfs-file (fn [^bytes input ^GridFS fs] + (.createFile fs input))}) + +(extend-protocol GridFSInputFileFactory + String + (create-gridfs-file [^String input ^GridFS fs] + (.createFile fs (io/file input))) + + File + (create-gridfs-file [^File input ^GridFS fs] + (.createFile fs input)) + + InputStream + (create-gridfs-file [^InputStream input ^GridFS fs] + (.createFile fs input))) + (defn ^GridFSInputFile make-input-file [^GridFS fs input] - (.createFile fs (to-input-stream input) true)) + (create-gridfs-file input fs)) (defmacro store [^GridFSInputFile input & body]