我正在尝试为用Python编码的GCE应用程序创建blobstore上载过程。
我没有使用blobstore_handlers进程的webapp。
以这种方式上传blob的过程是什么?
我已实现了创建上传网址端点:
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)
返回的网址不是APP上的有效路由:
http://127.0.0.1:8080/_ah/upload/ag1kZXZc3RyaW5nLWltciILEhVfX0Jsb2JVcGxvYWRTZXNzaW9uX18YgICAgICAgAsM
当我尝试POST到此URL时,我收到此错误:
The url "/api" does not match any handlers.
我的app.yaml:
handlers:
# Endpoints handler
- url: /_ah/spi/.*
script: app_api.APPLICATION
我的问题:
我是否需要在我的端点应用程序之外创建一个单独的脚本来将blob上传到?或者有没有办法将上传URL指向另一个端点方法来处理上传过程?
当我尝试在应用上指定另一个端点作为上传网址时,它会被忽略。
EX:
upload_url = blobstore.create_upload_url('/api#p/Api/v1/api.app.blobstore_upload')
注意我已从上述网址中删除了应用名称并将其替换为API,但我使用的网址是应用中的有效网址。
我看到旧文件进程已弃用,并替换为google云存储过程。这是我应该走的方向吗?
答案 0 :(得分:0)
Blobstore上传works in several steps:
create_upload_url(callbackUrl)
创建一次性上传网址。发送给客户。multipart/form-data
POST请求将数据上传到该网址。callbackUrl
。您需要在该Url上定义一个处理程序。处理程序接收Google为上传的内容创建的blobstore密钥。答案 1 :(得分:0)
我通过使用gcs API函数解决了这个问题:
https://cloud.google.com/appengine/docs/python/googlecloudstorageclient/functions
EX:
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()