为什么我得到NoSuchKey在DigitalOcean桶?



我正在使用DigitalOcean的空间,这反过来是S3兼容的。我创建了一些桶,我可以毫无问题地使用Python/aioboto3使用凭证上传文件,但是,我只是无法获得桶中包含的文件列表…以下是python代码:

async def list_files(bucket_name):
session = aioboto3.Session()
async with session.client(
's3',
region_name=config("S3REGION"),
endpoint_url=config("S3URL"),
aws_access_key_id=config("S3AK"),
aws_secret_access_key=config("S3PK"),
config=Config(signature_version='s3v4')
) as s3_client:
try:
response = await s3_client.list_objects(Bucket=bucket_name)
return response.get("Contents", [])
except Exception as e:
return "500 - " + str(e) + " // " + bucket_name

忘记返回,问题出现在这一行:response = await s3_client.list_objects(Bucket=bucket_name)

给出错误:500 -调用ListObjects操作时发生错误(NoSuchKey): Unknown//mybucketname">

相信凭据是可以的,因为相同的凭据用于文件加载并且它们有效。我尝试了aioboto3文档,整个互联网和DigitalOcean社区,自2021年以来一直存在未回答的相同问题。

我是云计算新手,希望有人能给我一些建议,告诉我哪里出了问题。

Thanks is advance.

我已经试过上传一个可以工作的文件我试图检索桶,它给出了一个空数组我在数字海洋的空间管理中核实了所有的名字都是正确的我证实了凭证是有效的我与谈话作斗争,结果却毫无用处我查看了实现糟糕的aioboto3文档我寻找新的,但没有成功我不知道还能做什么

好的,我的问题是,我包括我的桶的名称在URL,我正在使用。正如你们所指出的,我修改了我的代码如下:

async def list_files(bucket_name, prefix):
session = aioboto3.Session()
async with session.client(
's3',
region_name=config("S3REGION"),
endpoint_url=config("S3URLCLEAN"), #This is the url WITHOUT my bucket
aws_access_key_id=config("S3AK"),
aws_secret_access_key=config("S3PK"),
config=Config(signature_version='s3v4')
) as s3_client:
try:
response = await s3_client.list_objects(Bucket=bucket_name, Prefix=prefix) #the prefix is 'myfoldername/'
return response.get("Contents", [])
except Exception as e:
return "500 - " + str(e) + " // " + bucket_name

显然我将工作正确的错误处理程序和东西,但为了测试的目的,这是有效的。现在我收到一个JSON,其中包含bucket中文件夹中的所有文件!!

非常感谢你们的快速帮助!

最新更新