我正在尝试使用Database.MongoDB软件包将文件从磁盘复制到MongoDB GridFS中的文件。
main :: IO ()
main = do
pipe <- MDB.connect (host "127.0.0.1")
_ <- access pipe master "baseball" run
close pipe
run :: MDB.Action IO GFS.File
run = do
uploadImage "sandbox/bat.jpg"
uploadImage :: Text -> MDB.Action IO GFS.File
uploadImage src = do
bucket <- GFS.openDefaultBucket
runConduitRes $ sourceFileBS (unpack src) .| (hole $ GFS.sinkFile bucket src)
这不起作用,因为 sourceFileBS 期望作为基础monad中的Resource而 GFS.sinkFile 希望MongoDB成为 Action (a专业读者)。
将这些导管连接在一起的优雅方法是什么?
答案 0 :(得分:1)
如果没有所有可用的类型和功能,有点难以告诉您最佳方法。但是,应该工作的一种方式看起来像这样:
withBinaryFile (unpack src) ReadMode $ \h -> runMongo $ runConduit $
sourceHandle h .| GFS.sinkFile bucket src