Clojure ile Compojure'da bir statik dosya sunucusu oluşturuyorum ve dosya sisteminden bir görüntü okumak ve bu görüntüyü bir Compojure yolu ile görüntülemek üzereyim.Bir ikili dosyanın içeriğini Clojure'daki bir dizeye nasıl okunur?
slurp maalesef çok iyi ikili veri işlemez, ve o zamandan beri bu 100 farklı yollar denedim ama bu benim son başarısız girişimi:
(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"))
Bu akım girişimi aynı kaderi uğrar görünüyor içerik dizgisini ve onun ve kodlanmış dizeyi ekleyebileceğimiz slurp kullanarak, ancak içerik türünü görüntü/jpeg olarak değiştirdiğimde kırık bir görüntüdür.
Bütün gün dün Google'da arama yaptım, ancak örneklerin hiçbiri aynı amacı gerçekleştiremedi ve Java IO hakkında biraz daha fazla bilgi edinmelerine yardımcı olurken, gitmem gereken yere ulaşmama yardımcı olacak kadar net değildiler ya da zaten elde ettiğim aynı sonuçları ürettim (örnek: Best way to read contents of file into a set in Clojure). (! O benim sonraki soru olarak nasıl yanı filepath gelen içerik türünü almak için bana söyleyebilir Hayali bonus puan ise)
İyi lanet olsun. Siz doğru efendim! İkili verileri bir dizeye nasıl okuyacağımı bilmemle ilgilenirdim, ancak bir gün onu anlamaya çalışırken öldürdüğümde, bu benim acil sorunumu çözüyor. Teşekkürler! –
Yapma. Dizeler ikili değil, bunun iyi bir tarafı olmayacak. – amalloy