Google云端点非WebApp iOS客户端Blobstore
我试图为一个用Python编码的GCE应用程序创建一个blobstore上传过程 我没有使用blobstore\u处理程序进程的Web应用程序 以这种方式上传blob的过程是什么 我已经实现了创建上载URL端点: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
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请求将数据上载到该UrlcallbackUrl
。您需要在该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()