使用 amazonka-s3 中的 getObject 时的 ConnectionClosed
`ConnectionClosed` when using `getObject` from amazonka-s3
我有一个功能
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+conduit的正确使用。
我正在使用 lts-11.14
和 amazonka-s3-1.6.0
。
事实证明,这是 known issue 的 Stackage 版本 amazonka-s3
,尚未修复。解决方法是升级 amazonka/core/s3 依赖项以指向 master 的固定版本:
# stack.yaml
extra-deps:
- git: git@github.com:brendanhay/amazonka
commit: 248f7b2a7248222cc21cef6194cd1872ba99ac5d
subdirs:
- amazonka
- core
- amazonka-s3
我有一个功能
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+conduit的正确使用。
我正在使用 lts-11.14
和 amazonka-s3-1.6.0
。
事实证明,这是 known issue 的 Stackage 版本 amazonka-s3
,尚未修复。解决方法是升级 amazonka/core/s3 依赖项以指向 master 的固定版本:
# stack.yaml
extra-deps:
- git: git@github.com:brendanhay/amazonka
commit: 248f7b2a7248222cc21cef6194cd1872ba99ac5d
subdirs:
- amazonka
- core
- amazonka-s3