无法从Python中的S3 Bucket下载图像/Code已经有了访问密钥

2024-06-01 01:28:13 发布

您现在位置:Python中文网/ 问答频道 /正文

对于一个项目,我需要下载S3 bucket中的一些项目。我已经看到过关于这个话题的类似帖子;但是,我在程序中硬编码了我的访问密钥ID和秘密访问密钥,仍然无法下载它们。Python不断返回错误:

“botocore.exceptions.NoCredentialsError:找不到凭据”

尽管提供了我的凭据,我仍然无法下载。我的代码如下。有人能帮我纠正一下吗

import boto3
import os
"""import sys
import csv
import pandas as pd
import numpy as np
import tensorflow as tf"""
import nibabel as nib
from boto3.session import Session


aws_access_key_id = '********************'
aws_secret_access_key = '****************************************'
bucket1 = 'adnimcic'
mcic = [[], [], []]
mcicc = [[], [], []]
bucket2 = 'adnimcinc'
mcinc = [[], [], []]
bucket3 = 'adniresults'
results = []
s3_client = boto3.client('s3')


#connecting to S3
session = Session(aws_access_key_id, aws_secret_access_key)
s3 = session.resource('s3')
bucket1obj = s3.Bucket(bucket1)
#bucket2obj = s3.Bucket(bucket2)
#'MCIc_Segmented/ADNI_002_S_0729_MR_MP-RAGE_REPEAT_br_raw_20070225105857428_72_S27091_I41585_be_be_pve_2.nii.gz_extracted'
def concatenate(name):
    name = name.split('.')
    name.pop()
    name = name[0] + '.' + name[1]
    name = name.split('/')
    name = name[1]
    return name

def download(bucketname, key):
    path = '/Volumes/LaCie Mac/' + concatenate(key.key)
    s3_client.download_file(bucketname, key.key, path)

for key in bucket1obj.objects.all():
    if 'pve_0' and 'extracted' in key.key:
        mcic[0].append(key)
        download(bucket1, key)
for key in bucket1obj.objects.all():
    if 'pve_1' and 'extracted' in key.key:
        mcic[1].append(key)
        download(bucket1, key)
for key in bucket1obj.objects.all():
    if 'pve_2' and 'extracted' in key.key:
        mcic[2].append(key)
        download(bucket1, key)

Tags: keynameinimportawss3accessdownload
1条回答
网友
1楼 · 发布于 2024-06-01 01:28:13

查看代码,您有两个不同的S3对象,s3_clients3

s3_client = boto3.client('s3')

...

session = Session(aws_access_key_id, aws_secret_access_key)
s3 = session.resource('s3')

...

def download(bucketname, key):
    path = '/Volumes/LaCie Mac/' + concatenate(key.key)
    s3_client.download_file(bucketname, key.key, path)

````

查看您的代码,它看起来像您在aws_access_key_id资源上使用的session对象上使用的aws_access_key_idaws_secret_access_key,但您没有使用s3_client上的会话

如果我正确理解您的问题,您应该能够通过从会话中创建客户端来解决此问题,如:

session = Session(aws_access_key_id, aws_secret_access_key)
s3 = session.resource('s3')
s3_client = session.client('s3')

相关问题 更多 >