簡體   English   中英

Zip 一組來自 appengine 數據存儲的 blob

[英]Zip a set of blobs from appengine datastore

我需要 zip 數據存儲中可用的一組 blob。 這些可以是不同類型的,例如一些 html/images/swf/ 等。所有這些都可以作為 blob 在數據存儲中使用。

我試圖實現這個解決方案: Zipping dynamic files in App Engine (Python) ?

嘗試使用一些 static 文本效果很好,我還能夠使用一組具有相應內容的文件創建 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()

根據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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM