2012-02-29 4 views
0

データストアにBlobプロパティとして画像を保存します。Blobプロパティだけを使用しています。データストアからBlobプロパティをバイナリファイルとしてエクスポートする

私のアプリを別のプラットフォームに移行したいので、画像をJPEGファイルとして取得したいと考えています。バルクローダーツールやappengineが提供するマッパーツールを使ってこれを行う方法はありますか?

ありがとうございます!

更新

私はblob_to_fileはヘルパーを変換を使用してみましたが、それを動作させることができませんでした。

この

は私bulkloader.yamlファイル

python_preamble: 
- import: base64 
- import: re 
- import: google.appengine.ext.bulkload.transform 
- import: google.appengine.ext.bulkload.bulkloader_wizard 
- import: google.appengine.ext.db 
- import: google.appengine.api.datastore 
- import: google.appengine.api.users 

transformers: 

- kind: File 
    connector: csv 
    connector_options: 
     encoding: utf-8 
     columns: from_header 

    property_map: 

     - property: fileId 
      external_name: fileId 

     - property: bytes_content 
      external_name: local_filename 
      export_transform: transform.blob_to_file('fileId', 'pictures') 

であり、これは私のファイルのモデルである:で

appcfg.py download_data --application=XXXX --kind=File --url=XXXXX/_ah/remote_api --filename=File.csv --config_file=bulkloader.yaml 

:私は次のコマンドでbulkloaderを実行

class File(db.Model): 
    fileId = db.IntegerProperty() 
    bytes_content = db.BlobProperty() 

ダウンロードの終わりには大きなバイナリファイルがあり、フォルダの画像は空です。 ご協力いただきありがとうございます!

答えて

1

"Bulkloader Transform Helper関数" blob_to_file()を使用できます。一般的な情報はhttp://code.google.com/appengine/docs/python/tools/uploadingdata.htmlとニック・ジョンソンの書面:http://blog.notdot.net/2010/04/Using-the-new-bulkloaderにあります。特にBlobPropertyエクスポートの

、bulkloaderサンプルアプリをチェックアウト:

python_preamble: 
- import: google.appengine.ext.bulkload.transform 

と、この:

あなたが 'bulkloader.yaml' を見てみると http://bulkloadersample.appspot.com/

をあなたがこれを発見するファイル

# A sample writing a BlobProperty to an external file. 
# (Note: not a BlobReferenceProperty.) 
- model: models.Attachment 
    connector: csv 
    connector_options: 
    encoding: utf-8 
    columns: from_header 
    property_map: 
    - property: __key__ 
     external_name: ID 
     export_transform: datastore.Key.name 
    - property: filename 
     external_name: filename 
    - property: filecontents 
     external_name: local_filename 
     export_transform: 
     transform.blob_to_file('filename', 'AttachmentBlobs') 
+0

ありがとうschuppe!あなたがリンクしているドキュメントを読んでいます。バルクローダーのソースコードに、探しているようなヘルパー関数もあります。http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/ext/bulkload /transform.py#318 私はそれを使用する方法がわかりません。 –

1

他にも2つの方法があります。 1)URLを取得して他のシステムにデータを送信します。 2)画像の数はそれほど大きくはありませんが、1つずつダウンロードすることができます。私は例としていくつかの作業コードを抽出しました:

kwis = KindWithImages.get_by_key_name(file_name)    
    if kwis: 
     (content_type, encoding) = mimetypes.guess_type(kwis.file_ext) 
     logging.info('download : %s%s content-type %s encoding %s' % (file_name, kwis.file_ext, content_type, encoding)) 
     if content_type == None : 
      self.response.out.write('Content_type unknown for : %s' % (kwis.file_ext)) 
     else : 
      self.response.headers['Content-Type'] = content_type 
      self.response.headers['Content-Disposition'] = 'attachment; filename=%s%s' % (file_name, kwis.file_ext) 
      self.response.out.write(kwis.content) 
関連する問題