图像错误,未加载 S3 图像检索
Image error, not loading for S3 image retrieval
我在我的后端(托管在 Elastic Beanstalk 上)编写了代码以从 S3 存储桶中检索文件并以不同的名称将其保存回存储桶。我正在使用 boto3 并创建了一个名为 's3'.
的 s3 客户端
bucketname
是桶名,keyname
是键名。我也在使用 tempfile
模块
tmp = tempfile.NamedTemporaryFile()
with open(tmp.name, 'wb') as f:
s3.download_fileobj(bucketname, keyname, f)
s3.upload_file(tmp, bucketname, 'fake.jpg')
我想知道我的理解是否错误(仍在调试为什么会出现错误)- 我创建了一个 tempfile
并打开并在其中保存了带有 keyname
的对象的内容和bucketname
。然后我将该临时文件以不同的名称上传到存储桶中。我的推理正确吗?
upload_file()
命令在第一个参数中需要文件名(作为 string
), 而不是 file
对象。
相反,您应该使用 upload_fileobj()
。
不过,我会推荐一些不同的东西...
如果您只想复制一个对象,您可以使用copy_object
:
response = client.copy_object(
Bucket='destinationbucket',
CopySource='/sourcebucket/HappyFace.jpg',
Key='HappyFaceCopy.jpg',
)
我在我的后端(托管在 Elastic Beanstalk 上)编写了代码以从 S3 存储桶中检索文件并以不同的名称将其保存回存储桶。我正在使用 boto3 并创建了一个名为 's3'.
的 s3 客户端bucketname
是桶名,keyname
是键名。我也在使用 tempfile
模块
tmp = tempfile.NamedTemporaryFile()
with open(tmp.name, 'wb') as f:
s3.download_fileobj(bucketname, keyname, f)
s3.upload_file(tmp, bucketname, 'fake.jpg')
我想知道我的理解是否错误(仍在调试为什么会出现错误)- 我创建了一个 tempfile
并打开并在其中保存了带有 keyname
的对象的内容和bucketname
。然后我将该临时文件以不同的名称上传到存储桶中。我的推理正确吗?
upload_file()
命令在第一个参数中需要文件名(作为 string
), 而不是 file
对象。
相反,您应该使用 upload_fileobj()
。
不过,我会推荐一些不同的东西...
如果您只想复制一个对象,您可以使用copy_object
:
response = client.copy_object(
Bucket='destinationbucket',
CopySource='/sourcebucket/HappyFace.jpg',
Key='HappyFaceCopy.jpg',
)