[英]No Response on Google App Engine Java Blobstore Upload from Android
[英]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 /數據存儲區的問題,可以使用以下選項之一:
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應用程序采用模塊化方法並為端點使用后端實例,則可以解決該問題。
這可能是最難實現的選擇,但是我提供的示例應該是一個好的開始。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.