簡體   English   中英

從Android應用程序將錄音上傳到Google App Engine

[英]Upload a recording to Google App Engine from Android app

我創建了一個進行基本語音錄制(存儲為.mp4)的android應用。 我想添加一項功能,可以將記錄(一次只記錄一次,不需要批量)發送到Google App Engine雲存儲。 然后,我希望能夠在(非常基本的)雲應用程序上收聽這些錄音。 我不想使用Blob存儲區,但要使用數據存儲區。 我以前使用過數據存儲,但始終只使用雲應用程序和python,從來沒有使用過android應用程序(而我的java充其量是搖搖欲墜的)。 以前,我只是從我的appspot網站表單中獲取其他數據,然后使用html和python將其發送到數據存儲區。

簡而言之,我的問題是,如何將錄音從我的android應用程序獲取到數據存儲區。 代碼段和/或文檔鏈接將非常有幫助。 簡短地解釋這些事物將如何交流/一起工作,將有助於我的大腦將這些點連接起來。

請注意,這是一個個人應用程序,僅供我自己學習和使用,因此我對安全性,用戶帳戶,可伸縮性等不是特別關注。

謝謝你的幫助!

對於這種用例,數據存儲區不是一個好的存儲選項,因為最大實體大小限制為1mb 對於該用例,建議使用GCS。 此外,如果您不太熟悉Java,則可以將Python用於GAE后端。

關於您如何將錄音從Android移動到GAE GCS /數據存儲區的問題,可以使用以下選項之一:

  1. 通過Google API客戶端庫使用GCS JSON API直接從Android應用上傳。 多數民眾贊成在一個簡單的選擇,並且有很多可用的示例。 如果您堅持使用它,該庫也可以用於數據存儲
  2. 使用Cloud Endpoints作為代理。 您可以將文件提交給端點處理程序,端點處理程序將文件保存在GCS中並返回響應。 由於您不關心安全性,因此以下示例不使用OAuth:
 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]) 

您不必生成客戶端庫,可以直接通過HTTP POST提交。 端點僅支持HTTPS連接,並且請求與其他GAE請求一樣受到相同的限制。 主要問題是請求大小為32兆字節。 考慮到提交給端點的二進制數據應使用base64編碼,因此二進制數據的最大限制為23-24mb。 另一個限制是請求的最后期限為60秒,如果您為GAE應用程序采用模塊化方法並為端點使用后端實例,則可以解決該問題。

這可能是最難實現的選擇,但是我提供的示例應該是一個好的開始。

  1. 使用Cloud Endpoints生成Blobstore API上傳網址。 Blobstore API允許上傳到GCS而不是Blobstore。 那也是一個相當簡單的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM