【问题标题】:Zip a set of blobs from appengine datastore从 appengine 数据存储区压缩一组 blob
【发布时间】:2011-06-30 16:24:32
【问题描述】:

我需要压缩数据存储中可用的一组 blob。 这些可以是不同类型的,例如一些 html/images/swf/ 等。 所有这些都在数据存储中作为 blob 可用。

我尝试实施此解决方案: Zipping dynamic files in App Engine (Python)?

尝试了一些静态文本,效果很好,我还能够创建一个包含一组具有各自内容的文件的 zip,但是从查询制作 zip 时我无法找到一些问题。

z.writestr(fil.Template_name, my_data.encode('UTF-8'))
File "C:\Python25\lib\zipfile.py", line 626, in writestr
self.fp.write(zinfo.FileHeader())
File "C:\Python25\lib\zipfile.py", line 260, in FileHeader
return header + self.filename + extra
UnicodeDecodeError: 'ascii' codec can't decode byte 0xde in position 12: ordinal not in range(128)

这是这部分代码的错误

       class filesDB(db.model) 
                   Template_file = db.BlobProperty()
                   Template_name= db.StringProperty()


       output = StringIO.StringIO()
       z = zipfile.ZipFile(output,'w')
       files =  filesDB.all().filter("fCreatedBy","sandeep")
       for fil in files:
        my_data = fil.Template_file
        z.writestr(fil.Template_name, my_data)
        z.close()

【问题讨论】:

    标签: python google-app-engine zipfile


    【解决方案1】:

    根据zipfile 文档:

    ZIP 文件没有正式的文件名编码。
    如果您有 unicode 文件名,则必须在将它们传递给 write() 之前将它们转换为所需编码的字节字符串。

    尝试使用 UTF-8 编码您的文件名,例如:

    class filesDB(db.model) 
                       Template_file = db.BlobProperty()
                       Template_name= db.StringProperty()
    
    
           output = StringIO.StringIO()
           z = zipfile.ZipFile(output,'w')
           files =  filesDB.all().filter("fCreatedBy","sandeep")
           for fil in files:
            my_data = fil.Template_file
            z.writestr(fil.Template_name.encode('utf-8'), my_data)
            z.close()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 2020-09-24
      • 2012-01-18
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多