gpt4 book ai didi

clojure - 如何在 clojure 中下载文件并将其从内存中解压?

转载 作者:行者123 更新时间:2023-12-02 10:35:56 24 4
gpt4 key购买 nike

我正在使用 clj-http 发出 GET 请求,响应是一个 zip 文件。此 zip 的内容始终是一个 CSV 文件。我想将 CSV 文件保存到磁盘,但不知道如何保存。

如果我在磁盘上有该文件,Raynes/fs 库中的 (fs/unzip filename destination) 效果很好,但我不知道如何强制 clj- 的响应http 到可以读取的内容。如果可以的话,我想直接解压文件而不使用

我得到的最接近的(如果甚至接近)让我到达 BufferedInputStream,但我从那里迷失了。

(require '[clj-http.client :as client])
(require '[clojure.java.io :as io])

(->
(client/get "http://localhost:8000/blah.zip" {:as :byte-array})
(:body)
(io/input-stream))

最佳答案

您可以使用纯java java.util.zip.ZipInputStreamjava.util.zip.GZIPInputStream 。取决于内容的压缩方式。这是使用 java.util.zip.GZIPInputStream 保存文件的代码:

(->
(client/get "http://localhost:8000/blah.zip" {:as :byte-array})
(:body)
(io/input-stream)
(java.util.zip.GZIPInputStream.)
(clojure.java.io/copy (clojure.java.io/file "/path/to/output/file")))

使用 java.util.zip.ZipInputStream 只会稍微复杂一点:

(let [stream (->
(client/get "http://localhost:8000/blah.zip" {:as :byte-array})
(:body)
(io/input-stream)
(java.util.zip.ZipInputStream.))]
(.getNextEntry stream)
(clojure.java.io/copy stream (clojure.java.io/file "/path/to/output/file")))

关于clojure - 如何在 clojure 中下载文件并将其从内存中解压?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32742744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com