2011-03-02 3 views
1

데이터를 BLOBSTORE에 업로드하고 있습니다. AppEngine 앱에서 Amazon S3로 임시로 머물러 있어야합니다. 이 Blob 저장소 API에 설명 된대로 나는 단지 BlobDonwloadHandler 통해 데이터를 얻을 수있는 것으로AppEngine : Blobstore에서 S3로 이동 하시겠습니까?

:

http://code.google.com/intl/de-DE/appengine/docs/python/blobstore/overview.html#Serving_a_Blob 그래서 내 응용 프로그램 내에서 그 덩어리 특정 다운로드 URL을 가져 오기 위해 노력했다 (내 질문에 어제를 기억). AppEngine (개발 서버 아님)에서 내부 URL을 가져 오는 것은 좋지 않은 스타일이라 할지라도 잘 알고 있습니다.

하지만 입방체가 작동하지 않습니다. 내 코드는 다음과 같습니다

result = urllib2.urlopen('http://my-app-url.appspot.com/get_blob/'+str(qr.blob_key)) 

그리고 난 정말 어떻게 해야할지하지 않는 검색 한 후

DownloadError: ApplicationError: 2

Raised by:

File "/base/python_runtime/python_lib/versions/1/google/appengine/api/urlfetch.py", line 332, in _get_fetch_result raise DownloadError(str(err))

을 얻고있다.

내가 본 모든 자습서는 사용자에게 다시 URL을 제공하는 데만 초점을 맞추고 있습니다. 하지만 Blobstore에서 Blob을 검색하여 S3 버킷에 보내려고합니다. 아무도 내가 그걸 어떻게 깨달을 수 있었는지 아니면 가능하지 않다는 생각을 했니?

미리 감사드립니다.

+0

왜이 작업을 수행하고 있습니까? 왜 파일을 S3에 직접 업로드하지 않습니까? –

+0

@ 닉 : 이렇게하는 이유 중 하나는 GAE에서 사진의 크기를 조정하게하는 것입니다. – Amir

+0

@ 닉 : 영구 저장을 위해 S3 및 GoogleStorage를 사용하고 있습니다. 사용자는 먼저 BLOBSTORE에 업로드하고 나중에 데이터를 저장해야하는 위치를 결정합니다. – Michael

답변

2

BlobReader를 사용하여 해당 BLOB에 액세스하고 S3에 보낼 수 있습니다.

http://code.google.com/intl/de-DE/appengine/docs/python/blobstore/blobreaderclass.html

+0

정말 큰 파일을 GAE에서 S3로 업로드하지 않도록주의하십시오. – Amir

+0

@Amir : 어떻게 작동할까요? 루프에서 blob_reader = blobstore.BlobReader (blob_key, buffer_size = 1048576)를 호출하고 S3 업로드 스트림에 추가 하시겠습니까? Boto는 이것을지지하지 않습니다. set_contents_from_string 메소드와 같은 botos 업로드 메소드를 살펴보면 작은 덩어리 (1MB와 같은)를 하나씩 보낼 가능성이 없습니다. 그래서 BlobReader 클래스는이 경우에 도움이되지 않을 것입니다. 아니면 뭔가 간과 했나요? – Michael

+0

필자는 boto를 사용한 적이 없지만 전체 BLOB를 버퍼 객체로 읽고 인코딩 (set_contents_from_file?을 사용하여) 할 수 있어야합니다. StringIO를 사용하여 버퍼가 파일 인 것처럼 할 수 있습니다. – Calvin

관련 문제