当前位置: 首页 > 知识库问答 >
问题:

InvalidS3ObjectException:无法从S3获取对象元数据?

汲时铭
2023-03-14

因此,我尝试使用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控制台,并将其设置为Amazon S3FullAccessAmazon.

这里会出什么问题?

[编辑]我确实重命名了这些文件,这样它们就没有了\\,但似乎仍然不起作用,这很奇怪。。


共有1个答案

郎伟兆
2023-03-14

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

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

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

 类似资料:
  • 我有一个AWS Lambda函数,它与IAM角色一起部署,可以“完全访问”Lamba、S3和Cloudwatch资源。它在很大程度上起作用。 我在函数入口点js.js中包含了一个npm模块。我的目标是让函数读取<代码>的内容。json文件上传到bucket后。我为Lambda函数创建了一个触发器,用于在存储桶的S3 PUT操作中执行此操作。 这是我使用的代码,主要来自另一个StackOverflo

  • 我试图弄清楚是否有可能返回某种流(可能是内存流?)我从我的桶里得到的东西。 S3 bucket包含很多不同类型的图像、文档等。所有这些都应该在我的网站上使用。但是,我不想显示AWS S3存储桶的路径 这就是为什么我试图创建一个流,并动态显示图像和可下载文档,而不是使用完整路径。这有意义吗?:-) 我用的是C#/。NET AWS SDK。 期待听到任何想法和方向指向!

  • 我不确定我是不是漏了一步。 我有一个s3 bucket,我需要能够从一个AWS SDK PHP脚本访问我写的运行在我的EC2上。我创建了一个IAM角色以允许访问。 IAM Allow_S3_Access_to_EC2 我的Bucket策略中没有任何关于我的EC2甚至我附加的IAM角色的内容。我也需要在我的桶策略中添加一些东西吗?这就是我困惑的地方。 我所经历的是,当一个新的对象被创建,我试图从我的

  • 我使用最新的freemarker版本2.3.23我有列表,其中包含用户对象,用户对象很简单,只包含名称属性。我的ftl文件如下所示: 我的Java代码如下所示: 错误显示如下:

  • 我试图复制最新的文件基于最后修改从AWS S3文件夹到一个文件夹在同一个桶中,并在复制命令中使用排除和包括。 Folder_Test1: 我必须过滤文件名只有最新的文件和排除复制文件: 我尝试:步骤1复制文件从Folder_Test1到Folder_Test2: 步骤2它将获取最新的文件从Folder_Test2: 如何将最新文件从文件夹_Test2复制到文件夹_Test3?或者如何从文件夹_Te

  • 如何从对象获取数组?我试图进入空数组,这样我就可以验证它的空状态。 输出