这个问题通常出现在S3存储桶中存在多个版本的相同文件时。在下载时,S3会自动选择存储桶中最新的版本,而不是原始文件名。解决方法是使用版本控制或确保在上传时使用独一无二的文件名。
以下是使用Python Boto3库上传并下载文件的示例代码,包括检索文件的实际名称:
import boto3
# 首先,初始化S3客户端或资源
s3 = boto3.client('s3')
# 或
# s3 = boto3.resource('s3')
# 上传文件
bucket_name = 'my-bucket'
file_name = 'my-image.jpg' # 如果有多个版本,请确保使用唯一的文件名
object_name = 'images/' + file_name # 存储在存储桶中的完整名称
s3.upload_file(file_name, bucket_name, object_name)
# 下载文件
downloaded_file_name = 'downloaded-image.jpg' # 保存为的文件名
response = s3.get_object(Bucket=bucket_name, Key=object_name)
with open(downloaded_file_name, 'wb') as f:
f.write(response['Body'].read())
# 检索实际文件名
response = s3.list_objects_v2(Bucket=bucket_name, Prefix='images/') # 需要指定前缀以限制文件名
print(response['Contents'][0]['Key']) # 打印存储桶中的第一个对象的实际名称