在Network.HTTP.Conduit
中,requestBodySourceIO
具有此类型签名:
Prelude Network.HTTP.Conduit Data.Conduit Control.Monad.Trans.Resource> :t requestBodySourceIO
requestBodySourceIO
:: GHC.Int.Int64
-> Source IO Data.ByteString.Internal.ByteString -> RequestBody
第一个参数是body的长度(以字节为单位)。将ByteString
的来源传递给Bytestring
同时跟踪到目前为止的Bytestring
的运行总和有什么好方法?这将有助于在请求结束时确定传递给它的长度与传递给它的model.save()
的总长度相匹配。
答案 0 :(得分:1)
您将获得一些字节来源 - 请调用此source
。
要构建源,您将传递给requestBodySourceIO
,只需追加一个跟踪长度的管道段:
mySource = source =$= processor 0
where processor sz = do bs <- await
let sz' = sz + BS.length bs
...
processor sz'
然后使用requestBodySourceIO
致电mySource
。