我想将图像上传到blobstore,因为我想支持大于1MB的文件。现在,我能找到的唯一方法是让客户端发出一个POST,它发送元数据,如地理位置,标签和服务器放入实体的内容。在此实体中,服务器还将blob的密钥放在将要存储实际图像数据的位置,并且服务器通过将create_upload_url()返回的url返回给客户端来结束请求。这工作正常,但是我可能会出现不一致,例如,如果永远不会发出第二个请求,那么blob永远不会被填充。该实体现在指向一个空的blob。
我能看到的这个问题的唯一解决方案是触发延迟任务,该任务将检查blob是否曾填充过上传。我不是这个解决方案的忠实粉丝,所以我猜测是否有人有更好的解决方案。
答案 0 :(得分:1)
我经历了完全相同的思考过程,但是在Java中,最终使用了Apache Commons FileUpload。我不熟悉Python,但您只需要一种处理multipart/form-data
上传的方法。
我将图像和我的其他字段一起上传,使用JQuery汇编多部分表单数据,然后我POST
到我的服务器。
在服务器端,我然后使用Google Cloud Storage client library(Python链接)将文件写入Google云端存储。这可以在一个块中完成,或者如果它是一个大文件则“流式传输”。一旦它在GCS中,您的App Engine应用程序可以使用相同的库读取它,或者您可以使用公共URL直接提供它,具体取决于您设置的ACL。