2011-06-30 9 views
0

データストアで利用可能なブロブのセットを圧縮する必要があります。 これらは、いくつかのhtml/images/swf /などの異なるタイプのものです。 これらはすべてデータストアでBLOBとして利用できます。appengineデータストアのブロブセットをジップする

このソリューションを実装しようとしました: Zipping dynamic files in App Engine (Python)

いくつかの静的テキストを試してみましたが、これはうまくいきました。それぞれのコンテンツを含むファイルセットでジップを作成することもできますが、クエリから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) 

これはzipfileドキュメント毎のコード

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

答えて

3

のこの部分のためのエラーです:

ZIPファイルのファイル名に関する公式なエンコーディング方式はありません。
ユニコードのファイル名がある場合は、それらを目的のエンコーディングのバイト文字列に変換してから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() 
+1

おかげで、シンプルな...考えを、私はこのtoooを試してみました –

関連する問題