Google app engine 将(大二进制)数据传递给appengine任务

Google app engine 将(大二进制)数据传递给appengine任务,google-app-engine,Google App Engine,我有一个任务端点,需要处理从前端请求上传的数据(比如大于1MB的文件)。但是,我不认为我可以通过TaskOptions.Builder从前端请求传递数据,因为我将得到“任务大小过大”错误 我需要一些“临时”的数据存储上传的数据,可以删除后,任务已成功处理它 选项A:将上传的数据存储在memcache中,将密钥传递给任务。这可能在大多数情况下都会起作用,除非在处理任务之前收回数据。如果这个问题能够解决,听起来是一个很好的解决方案 选项B:将数据存储在数据存储中(仅为此目的创建的实体)。将id传递给

我有一个任务端点,需要处理从前端请求上传的数据(比如大于1MB的文件)。但是,我不认为我可以通过TaskOptions.Builder从前端请求传递数据,因为我将得到“任务大小过大”错误

我需要一些“临时”的数据存储上传的数据,可以删除后,任务已成功处理它

选项A:将上传的数据存储在memcache中,将密钥传递给任务。这可能在大多数情况下都会起作用,除非在处理任务之前收回数据。如果这个问题能够解决,听起来是一个很好的解决方案

选项B:将数据存储在数据存储中(仅为此目的创建的实体)。将id传递给任务。任务负责在完成时删除实体

选项C:使用Blobstore服务。IMHO在概念上与方案B相似

目前,我认为方案B是最可行的方法


非常感谢您就处理这些情况的最佳方法提出建议。

选项B也不起作用,因为最大实体大小也是1mb。与任务相同的限制

选项A不能提供任何保证,值可以随时从memcache过期,并且可能在为值设置的过期截止日期之前过期


恕我直言,选项C最适合您的需要

如果您存储的数据大于1mb,则必须使用blobstore。(是的,您可以对数据存储中的数据进行分段,但这并不值得)。确保将数据以小于1mb的块写入blobstore。此外,由于任务队列是幂等的,如果请求的blobstore密钥不存在,您的任务不应该失败,因为以前的任务可能已经删除了它。

当您说“确保以小于1mb的数据块将数据写入blobstore”时,是指数据存储而不是blobstore,对吗。。。因为blobstore文件大小限制要高得多。我想我现在明白你的意思了。您指的是“blobstore”读取-BlobstoreServiceFactory.getBlobstoreService()。fetchData()大小不能超过1MB。不,我指的是对blobstore的写入。请参阅:。在f.write('data')调用中,您将拥有一个大数组。这个数组必须被分割成小于1mb的部分,然后在每个部分上调用f.write()。谢谢splix和@flips0。你们太棒了。所有的答案似乎都指向C选项,可惜我只能勾选一个正确答案。新年快乐!