我正在努力通过Servant下载(动态)文件。
说我具有使用该库从S3中提取文件的以下功能:https://hackage.haskell.org/package/aws:
color
然后我这样称呼它:
getS3Object
:: MonadIO m
=> MonadReader Config m
=> MonadError CustomError m
=> Text
-> m (Maybe ByteString)
getS3Object fileName = do
config <- ask
configObject <- constructS3Authentication
mgr <- liftIO $ newManager tlsManagerSettings
liftIO $ runResourceT $
Aws.pureAws (awsConfig configObject) (s3Config configObject) mgr (S3.getObject (config ^. awsCustomerDocumentsBucket) fileName) >>=
\gor -> runConduit (responseBody (S3.gorResponse gor) .| await)
当我调用此功能(通过Postman调用必需的路由)时,Potato.pdf是一个4kb的文件,似乎它可能是我的PDF文件的一部分,但不是全部。该文件无法打开。
奇怪的是,当我将fetchDocument
:: MonadIO m
=> MonadCatch m
=> MonadReader Config m
=> MonadError CustomError m
=> NewDocumentInput
-> m ByteString
fetchDocument inputDocument = do
let fileName = computeFileName inputDocument
documentObject <- getS3Object fileName
case documentObject of
Nothing -> throwError $ OtherAWSError "No document returned, or other uncaught exception"
Just document -> liftIO $ do
writeFile "./tmp/potato.pdf" document
return document
的最后一行更改为:
getS3Object
输出到磁盘的文件是完全正确(33KB)的PDF文件(可以打开c)。
我的问题是,我在哪里丢失文件的其余部分?我是否以某种方式错误地使用了导管?以及如何解决此问题。