【发布时间】: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 获取对象元数据。检查对象键、区域和/或访问权限。
到目前为止我有:
- 从 boto3 会话检查区域,存储桶和 aws 配置设置均设置为
us-east-2。 - 键不能错,我是直接从对象响应中传递的
- 权限方面,我检查了 IAM 控制台,并将其设置为
AmazonS3FullAccess和AmazonTextractFullAccess。
这里可能出了什么问题?
[编辑]我确实重命名了文件,使它们没有\\,但似乎它仍然无法正常工作,这很奇怪..
【问题讨论】:
-
该文件密钥看起来像本地文件,而不是 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