SpringBoot调用AWS Textract对接S3桶时Document无builder()方法问题咨询
报错根因
你当前的代码混用了AWS SDK for Java 1.x和AWS SDK for Java 2.x两套不兼容的API:
- 现有Textract客户端、Document类导入的都是1.x版本的包,1.x版本的
com.amazonaws.services.textract.model.Document类没有builder()方法,这个方法是2.x版本才有的 - 你导入的
software.amazon.awssdk.core.SdkBytes是2.x版本的工具类,和1.x代码不兼容
修复方案(推荐,最小改动,兼容现有1.x代码)
你不需要手动从S3下载文件流,1.x版本的Textract原生支持直接传入S3对象路径,修改后的S3集成代码如下:
// 集成S3正确代码 AmazonS3 s3Client = AmazonS3ClientBuilder.standard() // 和Textract使用相同的凭证和区域 .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials("Access key", "Secretkey"))) .withRegion(Regions.AP_SOUTH_1) .build(); // 直接构造S3对象,不需要手动读取流 S3Object s3Object = new S3Object() .withBucket("textract-bucket") .withName("image.jpg"); // 1.x版本Document使用withS3Object方法传参 Document document = new Document().withS3Object(s3Object); // 后续请求构造和原有逻辑一致 AmazonTextract client = clientBuilder.build(); DetectDocumentTextRequest request = new DetectDocumentTextRequest() .withDocument(document);
同时需要删除项目中无用的2.x版本导入语句:
// 删掉这行导入 import software.amazon.awssdk.core.SdkBytes;
其他注意事项
- 不要把AWS凭证硬编码在代码中,生产环境建议使用IAM角色、环境变量或者
~/.aws/credentials文件配置 - 确保你使用的凭证拥有对应S3对象的读取权限,以及Textract服务的调用权限
- 确保S3桶和Textract服务在同一个区域,避免跨区访问报错
内容的提问来源于stack exchange,提问作者Alan Chu2
相关产品推荐
相关产品推荐

