Haskell 使用管道将文件源文件发送到HTTP请求
我在尝试构造Haskell 使用管道将文件源文件发送到HTTP请求,haskell,amazon-web-services,amazon-s3,yesod,Haskell,Amazon Web Services,Amazon S3,Yesod,我在尝试构造请求体资源IO时遇到问题。 我对导管更新,正在尝试使用aws包将文件上载到S3 io $ withManager $ \mgr -> do Aws.pureAws cfg s3cfg mgr $ S3.putObject stcompleted "job.zip" $ RequestBodySourceChunked $ do CB.sourceFile "job.zip" 我收到的类型错误是这样的
请求体资源IO
时遇到问题。
我对导管更新,正在尝试使用aws
包将文件上载到S3
io $ withManager $ \mgr ->
do Aws.pureAws cfg s3cfg mgr $ S3.putObject stcompleted "job.zip" $
RequestBodySourceChunked $ do
CB.sourceFile "job.zip"
我收到的类型错误是这样的
Couldn't match type `Data.ByteString.Internal.ByteString'
with `Blaze.ByteString.Builder.Internal.Types.Builder'
Expected type: Source
(ResourceT IO) Blaze.ByteString.Builder.Internal.Types.Builder
Actual type: ConduitM
() Data.ByteString.Internal.ByteString (ResourceT IO) ()
In the return type of a call of `CB.sourceFile'
In a stmt of a 'do' block: CB.sourceFile "job.zip"
In the second argument of `($)', namely
`do { CB.sourceFile "job.zip" }'
putObject的类型为
putObject
:: Bucket
-> Data.Text.Internal.Text
-> http-conduit-1.9.5.2:Network.HTTP.Conduit.Types.RequestBody
(Control.Monad.Trans.Resource.Internal.ResourceT IO)
-> PutObject
我不知道如何构造RequestBody ResourceT IO,因为RequestBody的可能构造函数不包括ResourceRecet IO
data RequestBody m
= RequestBodyLBS Data.ByteString.Lazy.Internal.ByteString
| RequestBodyBS Data.ByteString.Internal.ByteString
| RequestBodyBuilder GHC.Int.Int64
Blaze.ByteString.Builder.Internal.Types.Builder
| RequestBodySource GHC.Int.Int64
(Data.Conduit.Internal.Source
m Blaze.ByteString.Builder.Internal.Types.Builder)
| RequestBodySourceChunked (Data.Conduit.Internal.Source
m Blaze.ByteString.Builder.Internal.Types.Builder)
这里的关键(稍微清理一下)是:
无法将类型ByTestString与生成器匹配
所以第一个问题是:如何将ByteString转换为生成器?我们得到了一些可能的点击,结果是最好的
下一个问题是如何转换源
以产生新类型的值。这需要对导管有一些了解,对此我推荐。但其想法是创建一个数据转换器(一个管道
),它通过testrings转换的传入流,并生成Builder
s的传出流,并将其与源
融合
对于第一步,我们希望使用Data.conductor.List
中的map
抽象。对于第二个,融合操作符是$=
。综上所述,我们有:
CB.sourceFile "job.zip" $= Data.Conduit.List.map fromByteString
正是我遇到的问题。谢谢,谢谢!!而且,您的库非常棒!:)