我正在使用 streaming-utils streaming-utils 流式传输HTTP 响应正文。我想跟踪类似于bytestring-progress允许使用 lazy ByteString
s 的进度。我怀疑toChunks
有必要这样做,然后减少读取的一些累积字节并返回未修改的原始流。但我无法弄清楚,流媒体文档非常无用,主要是对替代库的宏大比较。
到目前为止,这是我尽最大努力的一些代码。它还不包括计数,只是尝试在块流过时打印块的大小(并且不编译)。
download :: ByteString -> FilePath -> IO ()
download i file = do
req <- parseRequest . C.unpack $ i
m <- newHttpClientManager
runResourceT $ do
resp <- http req m
lift . traceIO $ "downloading " <> file
let body = SBS.fromChunks $ mapsM step $ SBS.toChunks $ responseBody resp
SBS.writeFile file body
step bs = do
traceIO $ "got " <> show (C.length bs) <> " bytes"
return bs