GAE通过POST发送CSV文件会产生错误500

时间:2016-03-09 02:45:29

标签: python google-app-engine csv blobstore

我正在尝试为我的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商店的唯一方法是通过用户提交的表单!

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您的代码问题不是“全部加载”,而是您正在进行4600次同步放置!如果你批处理所有这些并使用ndb.put_multi,我相信它有效。 python脚本可以复制提交的表单,上传到blobstore时有什么问题?

答案 1 :(得分:1)

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