Google云端点非WebApp iOS客户端Blobstore

Google云端点非WebApp iOS客户端Blobstore,ios,google-app-engine,google-cloud-endpoints,blobstore,Ios,Google App Engine,Google Cloud Endpoints,Blobstore,我试图为一个用Python编码的GCE应用程序创建一个blobstore上传过程 我没有使用blobstore\u处理程序进程的Web应用程序 以这种方式上传blob的过程是什么 我已经实现了创建上载URL端点: from google.appengine.ext import blobstore def blobstore_get_upload_url(self, request): upload_url = blobstore.create_upload_url('/uploa

我试图为一个用Python编码的GCE应用程序创建一个blobstore上传过程

我没有使用blobstore\u处理程序进程的Web应用程序

以这种方式上传blob的过程是什么

我已经实现了创建上载URL端点:

from google.appengine.ext import blobstore


def blobstore_get_upload_url(self, request):

    upload_url = blobstore.create_upload_url('/upload')
    return self.construct_valid_response(StatusResponse, upload_url)
返回的URL不是应用程序上的有效路由:

http://127.0.0.1:8080/_ah/upload/ag1kZXZc3RyaW5nLWltciILEhVfX0Jsb2JVcGxvYWRTZXNzaW9uX18YgICAgICAgAsM
当我尝试发布到此URL时,出现以下错误:

The url "/api" does not match any handlers.
我的app.yaml:

handlers:
# Endpoints handler
- url: /_ah/spi/.*
    script: app_api.APPLICATION
我的问题:

我是否需要在端点应用程序之外创建一个单独的脚本来将blob上载到?或者是否有一种方法将上载URL定向到另一个端点方法来处理上载过程

当我尝试在应用程序上指定另一个端点作为上载URL时,它将被忽略

例:

注意:我已经从上面的URL中删除了应用程序名称,并将其替换为API,但我使用的URL在应用程序中是有效的URL

我发现旧的文件流程已经被弃用,取而代之的是谷歌云存储流程。这是我应该去的方向吗?

Blobstore上传:

  • 通过
    创建上传url(callbackUrl)
    创建一次性上传url。把这个发给客户
  • 客户端必须然后使用
    多部分/表单数据
    POST请求将数据上载到该Url
  • 谷歌提取内容,存储到blobstore中,然后调用你的
    callbackUrl
    。您需要在该Url上定义一个处理程序。处理程序接收Google为上传内容创建的blobstore密钥

  • 我通过使用gcs API函数解决了这个问题:

    例:


    这是一篇关于在iOS客户端上使用Blobstore的好文章。该示例是用Java编写的,因此如果在用Python重新创建后端代码时遇到困难,请发表评论


    谢谢您的回答。这个过程对我来说很有意义。但是,如果没有带路由的webapp2,它能做到吗?我可以使用一个端点创建一个上传URL,但另一个云端点方法可以作为上传URL吗?当然不能作为上传URL-这些是谷歌生成的一次性URL。可能是上传处理程序url(回调url),但我对此表示怀疑。上传url很好,图像正在进入Blobstore。这是我遇到问题的重定向URL。重定向URL需要指向可以处理流程其余部分的endpoints方法。难道他们没有想到人们可能没有使用会话和网络应用程序吗?我当前的API上没有前端webapp。它只是一个移动应用程序服务。关于如何存储图像有什么建议吗?到目前为止,我发现允许上传文件的唯一方法是为服务和上传端点创建一个webapp。我正在传递由create_upload_URL创建的上传URL上的URL参数,并确保此webapp使用的是secure:always。传递的URL参数是用户对象和访问令牌的密钥。在webapp方法上,我实现了用户模型,并验证访问令牌与传入的用户的访问令牌匹配。我想这是哈奇。我将进一步研究GCS文件上传过程。
    upload_url = blobstore.create_upload_url('/api#p/Api/v1/api.app.blobstore_upload')
    
    default_retry_params = gcs.RetryParams(initial_delay=0.2,
                                       max_delay=5.0,
                                       backoff_factor=2,
                                       max_retry_period=15)
    
    gcs.set_default_retry_params(default_retry_params)
    
    bucket_name = os.environ.get('BUCKET_NAME',
                             app_identity.get_default_gcs_bucket_name())
    
    gcs_file = gcs.open('/' + bucket_name + '/' + str(c.key.id()) + '/' + request.image_key,
                        'w',
                        options={'x-goog-meta-creator': str(u.key.id()),
                                 'x-goog-meta-image-key': request.image_key,
                                 'x-goog-meta-container': str(c.key.id())})
    
    gcs_file.write(base64.b64decode(request.encoded_image))
    gcs_file.close()