【问题标题】:InvalidS3ObjectException: Unable to get object metadata from S3?InvalidS3ObjectException:无法从 S3 获取对象元数据?
【发布时间】:2021-06-19 16:28:57
【问题描述】:

所以我尝试使用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 控制台,并将其设置为 AmazonS3FullAccessAmazonTextractFullAccess

这里可能出了什么问题?

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

【问题讨论】:

  • 该文件密钥看起来像本地文件,而不是 S3 密钥。
  • @stdunbar 哦,在这种情况下,我使用response = s3_client.upload_file(file_name, bucket, object_name=file_name) 将对象上传到s3,所以这应该不是问题。我故意将object_name 命名为文件路径
  • 来自S3 Object key and metada 文档,反斜杠字符位于“要避免的字符”部分。对于测试,没有那个字符是否可以工作?
  • @stdunbar 是的,不幸的是,我刚刚尝试过,但仍然无法正常工作

标签: python amazon-web-services amazon-s3 boto3 amazon-textract


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-01-28
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多