2012-02-29 2 views
0

데이터 저장소에 그림을 Blob 속성으로 저장하고 Blob 속성 만 사용하고 있습니다.Datastore에서 blob 속성을 이진 파일로 내보내기

이제 내 앱을 다른 플랫폼으로 마이그레이션하려고하며 그림을 JPEG 파일로 가져 오려고합니다. bulkloader 도구를 사용하거나 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

"벌크 로더 변환 도우미 기능"blob_to_file()을 사용할 수 있습니다. 일반적인 정보는 http://code.google.com/appengine/docs/python/tools/uploadingdata.html과 Nick Johnson의 글을 참고하십시오 : 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

두 가지 다른 대안이 : 1) 2 가져 오기 URL과 다른 시스템에 데이터를 전송)하는 경우를 이미지의 수는 그렇게 크지 않습니다. 하나씩 다운로드 할 수 있습니다. 예를 들어 작업 코드를 추출했습니다.

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)