Boto3在将文件上传到S3存储桶时遇到问题

时间:2019-06-03 02:56:23

标签: python python-3.x boto3

我制作了一个简单的脚本,其中将文件上传到s3存储桶中。 我的代码如下,非常简单。

bucket = "my-bucket"
file_name = "/my-file-path/download.jpeg"
key_name = None
s3 = boto3.client("s3")

if key_name is None:
    key_name = file_name.split('/')[-1]
s3.upload_file(file_name, bucket, key_name)

所以我要实现的目标是,如果任何人都不会传递密钥名称或密钥名称为None,那么filename就会成为密钥名称并上传到s3存储桶中。

如果我通过密钥名,则上面的代码可以正常工作,但是当我在密钥名中通过None时,它将无法工作,并且我调试了代码,发现了这一点

-> key_name = file_name.split('/')[-1]
(Pdb) key_name
'download.jpeg'
(Pdb) next
--Call--
> /usr/lib/python3.6/threading.py(1279)_shutdown()
-> def _shutdown():
(Pdb) 
> /usr/lib/python3.6/threading.py(1285)_shutdown()
-> tlock = _main_thread._tstate_lock

最后,文件不会在s3上上传。如果有人对此有任何想法,请帮助。您的帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

我会将其放入函数并进行测试。例如:

def upload(file_name, bucket="my-bucket",key_name=None):
    if not key_name:
        key_name = file_name.split('/')[-1]
    s3 = boto3.client("s3")
    s3.upload_file(file_name, bucket, key_name)