2014-12-03 2 views
0

기본 음성 녹음을 수행하는 Android 앱을 만들었습니다 (.mp4로 저장 됨). Google App Engine 클라우드 스토리지에 녹화를 보낼 수있는 기능 (한 번에 하나씩, 일괄 처리 필요 없음)을 추가하고 싶습니다. 그런 다음, 내 (아주 기본적인) 클라우드 앱에서이 녹음을들을 수 있기를 원합니다. 나는 blobstore하지만 데이터 저장소를 사용하고 싶지 않습니다. 이전에는 데이터 저장소를 사용했지만 항상 클라우드 앱과 파이썬 만 사용했습니다. 안드로이드 앱으로는 사용하지 않았습니다. (그리고 내 자바는 최고로 불안정합니다.) 이전에는 appspot 웹 사이트 양식에서 다른 데이터를 가져 와서 html과 python을 사용하여 데이터 저장소로 보냈습니다.Android 앱에서 Google App Engine에 레코딩 업로드

간단히 말해서, 내 질문은 내 안드로이드 앱에서 내 음반을 데이터 저장소로 가져 오는 방법입니다. 코드 스 니펫 및/또는 문서 링크가 도움이 될 것입니다. 또한 이러한 것들이 어떻게 의사 소통/협업 할 것인가에 대한 간단한 설명은 내 두뇌가 점들을 연결하는 데 도움이 될 것입니다.

참고,이 그냥 내 자신의 학습에 대한 개인 응용 프로그램을 내가 보안, 사용자 계정, 확장 성 등을 도와

감사에 대해 매우 우려하지 않다 그래서 사용!

답변

0

데이터 저장소는 최대 실체 크기가 1mb으로 제한되어 있으므로이 사용 사례에 적합한 저장 옵션이 아닙니다. GCS는이 사용 사례에 권장되는 옵션입니다. 또한 Java에 익숙하지 않은 경우 GAE 백엔드에 Python을 사용할 수 있습니다.

GCS/데이터 저장소를 GAE 안드로이드에서 녹음을 이동하는 방법에 대한 질문에 대해서는, 당신은 이러한 옵션 중 하나를 사용할 수 있습니다 : 구글 API를 클라이언트 라이브러리를 통해

  1. 사용 GCS JSON API는 안드로이드 응용 프로그램에서 직접 업로드 할 수 있습니다. Thats는 쉬운 옵션이며 많은 샘플을 이용할 수 있습니다. 이 라이브러리는 사용을 고집한다면 Datastore에도 사용할 수 있습니다.
  2. Cloud Endpoints을 프록시로 사용하십시오. 파일을 엔드 포인트 핸들러에 제출할 수 있으며 엔드 포인트 핸들러는 파일을 GCS에 저장하고 응답을 리턴합니다. 당신이 보안에 관심을하지 않을 때, 여기의 OAuth를 사용하지 않는 예입니다 : 당신은 클라이언트 라이브러리를 생성하지 않고 HTTP POST를 통해 직접 제출할 수 있습니다
import cloudstorage as gcs 
import endpoints 
import os 

from google.appengine.api import app_identity 
from protorpc import messages 
from protorpc import message_types 
from protorpc import remote 

class Base64File(messages.Message): 
    file = messages.BytesField(1, required=True, variant=messages.Variant.BYTES) 

class ResponseMSG(messages.Message): 
    message = messages.StringField(1) 

FILE_RESOURCE = endpoints.ResourceContainer(Base64File, 
              file_name=messages.StringField(2,required=True), 
              content_type=messages.StringField(3,required=True)) 

@endpoints.api(name='gcsuploadapi', version='v0.1', 
             description='Upload a file to GCS.') 
class GCSUploadAPI(remote.Service): 
    @endpoints.method(FILE_RESOURCE, ResponseMSG, 
         path='upload/{file_name}', http_method='POST', 
         name='upload.file') 
    def upload_file(self, request): 
     # get app default bucket and prepare filename (project should have billing enabled) 
     bucket_name = os.environ.get('BUCKET_NAME', 
           app_identity.get_default_gcs_bucket_name()) 
     bucket = '/' + bucket_name 
     filename = bucket + '/' + request.file_name 

     # create file (request.content_type contains MIME type submitted) 
     write_retry_params = gcs.RetryParams(backoff_factor=1.1) 
     gcs_file = gcs.open(filename, 'w', 
          content_type=request.content_type, 
          retry_params=write_retry_params) 
     gcs_file.write(request.file) 
     gcs_file.close() 

     return ResponseMSG(message="done") 

app = endpoints.api_server([GCSUploadAPI]) 

. 엔드 포인트는 HTTPS 연결 만 지원하며 요청은 다른 GAE requests과 동일한 제한 사항이 적용됩니다. 주요 관심사는 32 메가 바이트의 요청 크기입니다. 엔드 포인트에 제출 된 바이너리 데이터는 base64로 인코딩되어야하며 바이너리 데이터의 대략적인 한계는 23-24MB입니다. 또 다른 한도는 요청에 대해 60 초의 마감일이며, 귀하의 GAE 앱에 modular approach으로 가서 엔드 포인트에 백엔드 인스턴스를 사용하면 해결할 수 있습니다.

아마도 구현하기가 가장 힘든 옵션이지만, 필자가 제공 한 예는 좋은 시작이어야합니다.

  1. Cloud Endpoints를 사용하여 Blobstore API 업로드 URL을 생성합니다. Blobstore API를 사용하면 Blobstore 대신 uploading to GCS을 사용할 수 있습니다. Thats는 너무 쉬운 옵션입니다.
관련 문제