S3存储桶目录访问及文件获取技术求助(基于boto3)
S3存储桶文件获取解决方案
问题背景
我的S3存储桶结构如下:
—- videos —-carvideos Tesla.video Chevrolet.video Car.png Bike.png —-Files
需要实现:
- 从
videos路径下获取Car.png文件 - 从
videos/carvideos路径下获取所有视频文件
现有代码基础:
import boto3 s3 = boto3.resource('s3', access_key, secret_access_key) bucket = s3.Bucket('name of my bucket')
1. 获取videos/Car.png文件
S3中没有真实的目录结构,文件的位置由**键(Key)**标识,videos/Car.png就是该文件的完整键值。你可以选择直接下载到本地,或者读取文件内容:
下载到本地
# 替换第二个参数为你想要保存的本地路径 bucket.download_file('videos/Car.png', './Car.png')
读取文件内容(不下载)
# 获取S3对象 car_png_obj = s3.Object('name of my bucket', 'videos/Car.png') # 读取文件二进制内容 file_content = car_png_obj.get()['Body'].read()
2. 获取videos/carvideos/下所有视频文件
通过指定Prefix(前缀)过滤该路径下的所有对象,遍历处理每个文件:
# 过滤前缀为videos/carvideos/的所有对象 for obj in bucket.objects.filter(Prefix='videos/carvideos/'): # 跳过S3自动生成的"目录"占位对象(如果存在) if obj.key == 'videos/carvideos/': continue # 下载文件到本地,这里以文件名作为本地保存名称 bucket.download_file(obj.key, obj.key.split('/')[-1]) # 若只需读取内容,可替换为: # video_content = obj.get()['Body'].read() # 后续处理视频内容
注意事项
- 替换代码中的
'name of my bucket'为你的实际存储桶名称 - 确保AWS凭证拥有该存储桶的
s3:GetObject权限 - S3的路径分隔符为正斜杠
/,不要使用反斜杠
内容的提问来源于stack exchange,提问作者Kaynan Felipe Rodrigues
相关产品推荐
相关产品推荐

