2012-02-29 122 views
0

我將圖片存儲爲數據存儲中的Blob屬性,我沒有使用Blobstore,只是使用Blob屬性。從數據存儲導出blob屬性爲二進制文件

現在我想將我的應用程序遷移到不同的平臺,並且想將圖片作爲JPEG文件提取出來。有沒有辦法使用bulkloader工具或使用appengine提供的mapper工具?

謝謝!

更新

我嘗試使用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') 

這是我的文件模式:

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

我運行以下命令bulkloader:

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

在我下載的所有內容都是一個大的二進制文件,文件夾圖片是空的。 感謝您的幫助!

回答

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示例應用程序:http://bulkloadersample.appspot.com/

當你看到 'bulkloader.yaml' 文件,你會發現這一點:

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

這:

# 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!我一直在閱讀你鏈接的文檔。我還在bulkloader源代碼中找到了一個幫助函數,它似乎是我正在尋找的內容:http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/ext/bulkload /transform.py#318 雖然我不確定如何使用它。 – 2012-02-29 23:33:53

1

你有兩個其他的選擇: 1)發送數據到其他系統與網址取 2)如果圖像的數量並不是那麼大,你可以一個接一個下載。我提取了一些工作代碼作爲示例:

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) 
相關問題