У меня есть следующий код, в котором я хочу отправить InputStream файла в функцию fetch-items
, которая обрабатывает элементы маршрута /fetch.
(defn id->image [image-id]
(let [image (.getInputStream (gfs/find-by-id fs image-id))] image))
(defn item-resp [item]
(assoc item :_id (str (:_id item))
:images (into [] (map id->image (:image-ids item))))
)
(defn fetch-items [req]
(res/response
(map item-resp (find fs "items" {}))))
Вот мой запрос на стороне клиента с использованием cljs-ajax:
(ajax-request
{:uri "http://localhost:5000/fetch-items"
:method :get
:handler #(prn (into [] %))
:format (json-request-format)
:response-format (raw-response-format)
}
)
Но ответ, который я получаю от клиента, таков:
[:failure :parse] [:response nil] [:status-text "No reader function for tag object. Format should have been EDN"]
:original-text "{:_id \"5e63f5c591585c30985793cd\", :images [#object[com.mongodb.gridfs.GridFSDBFile$GridFSInputStream 0x22556652 \"com.mongodb.gridfs.GridFSDBFile$GridFSInputStream@22556652\"]]}{:_id \"5e63f5d891585c30985793d0\", :images [#object[com.mongodb.gridfs.GridFSDBFile$GridFSInputStream 0x266ae6c0 \"com.mongodb.gridfs.GridFSDBFile$GridFSInputStream@266ae6c0\"]]}{:_id \"5e63f5e891585c30985793d3\", ...
Почему в ответе говорится, что формат должен быть edn? Как извлечь этот файл/изображение на стороне клиента?
--- РЕДАКТИРОВАТЬ ----
Делаем следующее:
(IOUtils/toString image "utf-8")
возвращает строку размером 1594 байта, что намного меньше ожидаемого размера изображения. Я думаю, это потому, что он преобразует объект файла в base64, а не фактический блок данных, связанный с ним.
Как мне заставить его преобразовать фактический фрагмент GridFS в строку base64, а не в файловый объект?