У меня есть функция
import Control.Lens ((^.))
import Data.Conduit (sinkLazy)
import Network.AWS (MonadAWS, send, sinkBody)
import Network.AWS.S3 (BucketName (..), ObjectKey (..), gorsBody, getObject)
import qualified Data.ByteString.Lazy as LBS
getObjectData :: MonadAWS m => Text -> Text -> m LBS.ByteString
getObjectData b k = do
resp <- send $ getObject (BucketName b) (ObjectKey k)
(resp ^. gorsBody) `sinkBody` sinkLazy
, целью которой является получение данных из некоторого объекта на s3 в ленивую строку байтов.
Отправка запроса прошла успешно, и я вижуответ.Конечно, поле gorsBody
отображается как RsBody { ConduitM () ByteString (ResourceT IO) () }
, потому что это то, что оно есть.
Когда я пытаюсь выполнить последнюю строку функции, я получаю что-то вроде этого:
*** Exception: HttpExceptionRequest Request {
host = "s3.amazonaws.com"
port = 443
secure = True
requestHeaders = [("Host","s3.amazonaws.com"),("X-Amz-Date","20181121T001938Z"),("X-Amz-Content-SHA256","blah"),("X-Amz-Security-Token","blah"),("Authorization","<REDACTED>")]
path = "/path/to/my/file.txt"
queryString = ""
method = "GET"
proxy = Nothing
rawBody = False
redirectCount = 0
responseTimeout = ResponseTimeoutMicro 70000000
requestVersion = HTTP/1.1
}
ConnectionClosed
Кажется, это может быть связано с ленью;возможно, тело ответа никогда не оценивалось до закрытия соединения.Но это чистая спекуляция, и в любом случае я не уверен, как ее решить.У кого-нибудь есть представление о том, что здесь происходит?Похоже, то, что я делаю, это правильное использование канала amazonka-s3 +.
Я использую lts-11.14
и amazonka-s3-1.6.0
.