如何将“原始请求主体”通过管道传输到“请求主体源”中?

How does one pipe `rawRequestBody` into `requestBodySource`?

Yesod rawRequestBody 具有以下类型签名:

rawRequestBody :: MonadHandler m => Source m ByteString

并且 http-conduit 具有将源转换为 RequestBody:

的功能
requestBodySource :: Int64 -> Source (ResourceT IO) ByteString -> RequestBody

我希望能够通过将 rawRequestBody 转换为处理程序中的 RequestBody 将其流式传输到 S3 对象ResourceT IO ~ MonadHandler 不计算,我似乎做不到 MonadHandler m => m -> ResourceT IO

我试过:

transPipe - 如果我们从 rawRequestBody 得到 Source Handler ByteString 似乎到达 ByteString 的唯一方法是 consume 它,即

transPipe ??? rawRequestBody :: Source (ResourceT IO) ByteString

handlerToIO - 但是请求正文似乎已被清除,因此不会有任何可用数据

请帮忙:)

函数 waiRequest will give you back the WAI Request value. You can use sourceRequestBody 从中得到 Source