从我的 Angular 客户端对我的 Web API 2 服务器进行的 API 调用之一通过大量 SQL 查询和处理动态生成 XLSX 文件。 这可能需要长达五分钟的时间才能生成所有数据,并通过文件下载将其返回到客户端。 显然这很糟糕,因为即使页面仍在加载,Chrome 也会显示错误。
感觉就像这是我使用状态代码 202 告诉客户端它收到了请求的地方,但在那之后我不确定如何将文件实际发送回客户端。
我唯一能想到的是,服务器生成一个后台任务,该任务将在创建文件后将文件写入特定的临时位置,然后另一个 API 调用将下载该文件(如果存在)并将其从临时位置删除。
这就是我所做的,然后让客户端定期轮询该文件吗? 预生成文件不是一种选择,因为它必须具有实时数据(当然是在请求时)。
这是我使用状态代码 202 告诉客户端它收到了请求的地方,但在那之后我不确定如何实际将文件发送回客户端。
通常,HTTP 202 带有位置标头和资源可用位置和时间的指示器。 也可以添加指向状态监视器的链接,如此处所述。
为此,您可以为该进程生成一个 id,并在位置标头 url 中使用它来指向结果。
然后,客户端能够在资源应准备就绪时获取该资源。这意味着您需要一些短期的持久性。