【问题标题】:python boto3 uploaded file not visiblepython boto3上传的文件不可见
【发布时间】:2021-04-23 09:57:00
【问题描述】:

我有以下代码可以将文件上传到 S3

import boto3

client = boto3.client('s3', aws_access_key_id="key here",
                      aws_secret_access_key="secere here",
                      aws_session_token="token here")
#Uploade the file
with open("/tmp/test.csv", 'rb') as data:
     result=client.put_object(Body=data, Bucket=bucket_name, Key="path/test.csv")
print(result) 
# Read the object
obj=client.get_object(Bucket=bucket_name, Key="path/test.csv")
j = obj['Body'].read()
print(j)

此代码运行良好,我可以从 S3 读取文件内容,如上所示。问题是当我从 CLI 执行 aws s3 ls 时,该文件不可见,当我尝试复制它时显示 fatal error: An error occurred (404) when calling the HeadObject operation: Key "key here /test.csv" does not exist。同样,当我通过 AWS 控制台检查时,我看不到该文件。但是当我编写一个单独的代码只是为了读取文件时,它是可用的并且可以正确打印内容。

我检查了aws region is correct 是否正确,我在任何区域都没有看到文件。知道这里发生了什么吗?

【问题讨论】:

  • 您能否显示您尝试使用的完整 aws cli 命令?
  • @Marcin aws s3 ls s3://bucket/key/test.csv 两种情况下使用的凭据相同
  • 命令本身没问题。所以问题一定是使用了错误的存储桶、密钥、区域或帐户。你必须仔细检查这些。
  • 另外,如果你去 AWS 控制台,你也找不到那里的对象?
  • @Marcin 是的,这是正确的

标签: python-3.x amazon-s3 file-upload boto3


【解决方案1】:

我遇到了完全相同的问题。我的问题是我错误地使用了密钥。我的代码:

bucket.upload_file(filepath, '/my/path/on/aws/foo.txt')

我无法在控制台或使用 aws cli 上找到密钥,如下所示。

aws s3 ls s3://bucket/my/path/on/aws/foo.txt

但是,使用我以前在单独的代码中上传的相同密钥有效。请注意,密钥以“/”开头,这是导致问题的原因。

PS:我注意到您在此处共享的代码没有这个问题,但如果您以编程方式生成密钥,最好验证一下。

【讨论】:

    【解决方案2】:

    问题出在凭据上,即使凭据在本地机器上工作,它也给出了上述问题,但在切换到 CI/CD 服务器中存在的凭据后它工作正常

    【讨论】:

      猜你喜欢
      • 2019-04-23
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      相关资源
      最近更新 更多