我制作了一个简单的脚本,其中将文件上传到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上上传。如果有人对此有任何想法,请帮助。您的帮助将不胜感激。
答案 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)