GAE 通过 POST 发送 CSV 文件给出错误 500

GAE sending CSV file through POST gives error 500

我正在尝试为我的 GAE 应用程序创建一个端点,在那里我可以有问题地从客户端发送带有 CSV 文件(作为表单)的 POST 请求,然后服务器将接收它,并将其存储在 Datastore 中。但是,当我尝试发送大文件时,它超时了。似乎最大 URL 提取超时是 59.9 秒,这就是它失败的地方。

class CostTest(ndb.Model):
pickUp = ndb.StringProperty()
amount = ndb.StringProperty()

def post(self):
    self.response.write("part 1")
    print self.request.get('type')

    check_values = self.request.POST.getall('file')
    array = list(csv.reader(check_values))
    for c in array:
        pickup, amount = c
        entry = CostTest(pickUp=pickup,
                         amount=amount)
        entry.put()

        #print c
    self.response.write("part 2")
    self.response.write(self.request.get('file'))

app = webapp2.WSGIApplication([
('/csv/order', CsvFileLoader),
('/csv/kiosk', CsvFileLoader)
], debug=True)

我用来测试的文件有 ~4600 行,但是无法加载所有行!我尝试使用 Blobstore,但是我不知道如何从 POST 请求中获取文件(如果可能的话?)。似乎存储到 blob 存储的唯一方法是通过用户提交的表单!

提前感谢您的帮助。

您的代码的问题不在于 "load them all",而是您正在执行 4600 次同步放置!如果将它们全部批处理并使用 ndb.put_multi,我相信它会起作用。 python 脚本可以复制提交的表单,上传到 blobstore 有什么问题?

即使您 "sometimes" 达到 60 秒的 HTTP 请求限制,GAE 数据存储可能会随机花费更长的时间来处理读写,所以我建议先将上传的 CSV 文件存储在某个地方(您提到的 blobstore甚至作为另一个数据存储实体,只需注意大小限制),然后使用任务队列异步处理它(限制为 10 分钟)。