zip文件的Python S3上传给出AttributeError:'ZipFile'对象没有属性'tell'错误

时间:2018-08-29 03:59:01

标签: python amazon-s3 boto3 boto

I try to upload a zip file to my S3 bucket, but getting 
  

AttributeError:“ ZipFile”对象没有属性“ tell”错误

conn = boto.s3.connect_to_region(region_name=s3region,
                                             aws_access_key_id=userid,
                                             aws_secret_access_key=accesskey,
                                      calling_format=boto.s3.connection.OrdinaryCallingFormat())

            bucket = conn.get_bucket(s3bucket)

            k = boto.s3.key.Key(bucket, zipf)

            k.send_file(zipf) //<----Gives Exception

这是怎么了? (zipf是我的zip文件)

如果我这样修改代码;

   with open(zipf) as f:
            k.send_file(f)

我知道

  

TypeError:强制转换为Unicode:需要字符串或缓冲区,找到ZipFile

我创建了zip文件;

zipfilename = 'AAA_' + str(datetime.datetime.utcnow().replace(microsecond=0)) + '.zip'
    zipf = zipfile.ZipFile(zipfilename, mode='w')

    for root, dirs, files in os.walk(path):
        for f in files:
            zipf.write(os.path.join(root, f))
    zipf.close()

1 个答案:

答案 0 :(得分:1)

您的zip文件是使用zipf = zipfile.ZipFile(zipfilename, mode='w')创建的。

zipfile documentation之后,tell()属性仅为mode='r'定义。

此外,没有理由使用zipfile对象(而且在写入模式下)上传我们想要读取的文件(无论是zip还是其他格式),以将其上传到S3。

只需在按键上调用open(zipfilename, 'r')之前使用send_file()