Как один канал `rawRequestBody` в`requestBodySource`?
Йесод имеет rawRequestBody
со следующей подписью типа:
rawRequestBody :: MonadHandler m => Source m ByteString
И http-проводник имеет эту функцию, которая превращает источник в 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 ответ
Решение
Функция waiRequest вернет вам значение WAI- запроса. Вы можете использовать sourceRequestBody, чтобы получить Source
От этого.