Sto creando un file server statico in Clojure con Compojure e sono bloccato a leggere un'immagine dal file system e visualizzare quell'immagine attraverso una rotta Compojure.Come leggere il contenuto di un file binario in una stringa in Clojure?
slurp purtroppo non gestisce i dati binari molto bene, e ho provato questo 100 modi diversi da allora, ma questo è il mio ultimo tentativo fallito:
(defn image-output [filepath]
(try
(let [contents (apply str (with-open [rdr (io/reader filepath)]
(into #{} (line-seq rdr))))]
{
:status 200
:headers
{
"Content-Type" "image/jpeg",
"Content-Length" "",
"Cache-Control" "",
"Expires" ""
}
:body contents
}))
(catch Exception e {:status 404})))
(defn endpoint_view [params]
(if (contains? params :bucket)
(image-output (join "/" [data_path (:bucket params) (:dir params) (:filename params)]))))
(defroutes main-routes
(GET "/view/:bucket/:dir/:filename" {params :params} (endpoint_view params))
(route/files "/")
(route/resources "/s" {:root "./public/s"})
(route/not-found "Page not found"))
Sembra questo tentativo corrente subisce la stessa sorte come usare slurp, dove posso echo la stringa del contenuto e la sua stringa codificata, ma quando cambio il tipo di contenuto in image/jpeg è un'immagine spezzata.
Ho passato tutto il giorno ieri la ricerca su Google, ma nessuno degli esempi ha raggiunto lo stesso obiettivo, e mentre mi hanno aiutato a capire un po 'di più sull'Io Java, non erano abbastanza chiari da aiutarmi ad arrivare dove dovevo andare , o prodotto gli stessi risultati che stavo già ricevendo (esempio: Best way to read contents of file into a set in Clojure).
(! Punti bonus Immaginario se potete dirmi come ottenere il tipo di contenuto dal percorso del file così come questa è la mia prossima domanda)
Beh, dannazione. Lei ha ragione, signore! Sarei ancora interessato a sapere come leggere i dati binari in una stringa, anche se ho ucciso un giorno cercando di capirlo, ma questo risolve il mio problema immediato. Grazie! –
Non farlo. Le stringhe non sono binari, non ne uscirà nulla di buono. – amalloy