如何管道`rawRequestBody`成为`requestBodySource`?

时间:2015-07-17 01:39:13

标签: haskell yesod conduit http-conduit

Yesod rawRequestBody具有以下类型签名:

rawRequestBody :: MonadHandler m => Source m ByteString

http-conduit具有此功能,可将源转换为RequestBody

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

我希望能够将rawRequestBody转换为S3对象,方法是将其转换为处理程序中的RequestBody ResourceT IO ~ MonadHandler不会计算我似乎无法做MonadHandler m => m -> ResourceT IO

我试过了:

transPipe - 如果我们从Source Handler ByteString获得rawRequestBody,那么获得ByteString的唯一方法就是consume,即

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

handlerToIO - 但似乎请求正文已被清除,因此无法获得任何数据

请帮助:)

1 个答案:

答案 0 :(得分:1)

函数waiRequest会返回WAI Request值。您可以使用sourceRequestBody从中获取Source