У меня есть следующий код, в котором я хочу отправить InputStream файла в функцию fetch-items
, которая обрабатывает маршрут /fetch-items.
(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" {}))))
Вот мой запрос в на стороне клиента, используя cl js - 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? Как извлечь этот файл / изображение на стороне клиента?
--- EDIT ----
Выполнение следующих действий:
(IOUtils/toString image "utf-8")
возвращает строку размером 1594 байта, что намного меньше ожидаемого размера изображения. Я думаю, что это потому, что он преобразует объект файла в base64, а не фактический кусок данных, связанных с ним. ![database instance](https://i.stack.imgur.com/ALxT7.png)
Как мне сделать так, чтобы преобразовать фактический кусок GridFS в строку base64, а не в объект файла?