5

所以我尝试使用Amazon Textract读取多个 pdf 文件,多个页面使用StartDocumentTextDetection如下方法:

client = boto3.client('textract')
textract_bucket = s3.Bucket('my_textract_console-us-east-2')

for s3_file in textract_bucket.objects.all():
    print(s3_file)

    response = client.start_document_text_detection(
        DocumentLocation = {
                "S3Object": {
                    "Bucket": "my_textract_console_us-east-2",
                    "Name": s3_file.key,
                    
                } 
        },
        ClientRequestToken=str(random.randint(1,1e10)))
    print(response)
    break
     

当只是尝试从中检索响应对象时s3,我可以看到它打印为:

s3.ObjectSummary(bucket_name='my_textract_console-us-east-2', key='C:\\Users\\My_User\\Documents\\Folder\\Sub_Folder\\Sub_sub_folder\\filename.PDF')

相应地,我s3_file.key稍后使用它来访问对象。但我收到以下我无法弄清楚的错误:

InvalidS3ObjectException:调用 StartDocumentTextDetection 操作时发生错误 (InvalidS3ObjectException):无法从 S3 获取对象元数据。检查对象密钥、区域和/或访问权限。

到目前为止,我有:

  1. 从 boto3 会话检查区域,存储桶和 aws 配置设置都设置为us-east-2.
  2. 键不能错,我是直接从对象响应中传递的
  3. 权限方面,我检查了 IAM 控制台,并将其设置为AmazonS3FullAccessand AmazonTextractFullAccess

这里可能出了什么问题?

[编辑]我确实重命名了文件,因此它们没有\\,但似乎它仍然无法正常工作,这很奇怪..

4

1 回答 1

4

我遇到了同样的问题并通过在提取客户端中指定一个区域来解决它。就我而言,我使用了 us-east2

client = boto3.client('textract', region_name='us-east-2')

这样做的线索来自这个问题:https ://github.com/aws/aws-sdk-js/issues/2714

于 2020-10-24T08:22:19.603 回答