S3AsyncClient搭配LocalStack上传对象时出现校验和不匹配问题
解决S3AsyncClient上传LocalStack S3时的校验和不匹配错误
当使用S3AsyncClient向LocalStack的S3存储上传对象时,出现Data read has a different checksum than expected错误,可通过以下几种方式解决:
1. 禁用客户端校验和验证
LocalStack对异步上传的校验和处理逻辑和真实AWS S3存在差异,直接在客户端配置中关闭校验和验证即可绕过该问题:
val client = S3AsyncClient.builder() .credentialsProvider(DefaultCredentialsProvider.create()) .region(Region.US_EAST_1) .endpointOverride(URI.create("http://localhost:4572")) .overrideConfiguration { config -> config.checksumValidationMode(ChecksumValidationMode.NONE) } .build()
2. 调整RequestBody的生成方式
你当前使用Flux生成RequestBody的方式可能触发了LocalStack的兼容性问题,改用更直接的字节数组生成方式试试:
val data = "test".toByteArray() client.putObject( { it.bucket("test").key("test")}, AsyncRequestBody.fromBytes(data), ).get()
3. 升级LocalStack版本
该问题属于LocalStack已知的兼容性bug,较新的版本可能已经修复这个问题,尝试更新你的LocalStack到最新稳定版。
内容的提问来源于stack exchange,提问作者pixel
相关产品推荐
相关产品推荐

