需要 5 分钟才能完成的 REST 文件下载
REST file download that takes 5 minutes to complete
从我的 Angular 客户端对我的 Web API 2 服务器的 API 调用之一通过大量 SQL 查询和处理动态生成 XLSX 文件。最多可能需要五分钟才能生成所有数据,并 return 通过文件下载到客户端。显然这很糟糕,因为即使页面仍在加载,Chrome 也会显示错误。
感觉这是我使用状态代码 202 告诉客户端它收到请求的地方,但我不确定之后如何实际将文件发送回客户端。
我唯一能想到的是服务器生成一个后台任务,该任务会在文件创建后将文件写入特定的临时位置,然后另一个 API 调用将下载该文件,如果它存在并将其从临时位置删除。
我就是这样做的,然后让客户端定期轮询该文件吗?预生成文件不是一个选项,因为它必须有实时数据(当然是在请求时)。
It feels like this is where I'd use a status code 202 to tell the client that it got the request, but I'm not sure after that how to actually send the file back to the client then.
通常 HTTP 202 带有位置 header 和资源可用的位置和时间的指示符。
还有一种可能性是将 link 添加到状态监视器,如 here.
所述
为此,您可以为该进程生成一个 ID,并在 header url 位置使用它来指向结果。
当资源应该准备好时,客户端就可以获取该资源。这意味着您需要一些 short-term 坚持。
从我的 Angular 客户端对我的 Web API 2 服务器的 API 调用之一通过大量 SQL 查询和处理动态生成 XLSX 文件。最多可能需要五分钟才能生成所有数据,并 return 通过文件下载到客户端。显然这很糟糕,因为即使页面仍在加载,Chrome 也会显示错误。
感觉这是我使用状态代码 202 告诉客户端它收到请求的地方,但我不确定之后如何实际将文件发送回客户端。
我唯一能想到的是服务器生成一个后台任务,该任务会在文件创建后将文件写入特定的临时位置,然后另一个 API 调用将下载该文件,如果它存在并将其从临时位置删除。
我就是这样做的,然后让客户端定期轮询该文件吗?预生成文件不是一个选项,因为它必须有实时数据(当然是在请求时)。
It feels like this is where I'd use a status code 202 to tell the client that it got the request, but I'm not sure after that how to actually send the file back to the client then.
通常 HTTP 202 带有位置 header 和资源可用的位置和时间的指示符。 还有一种可能性是将 link 添加到状态监视器,如 here.
所述为此,您可以为该进程生成一个 ID,并在 header url 位置使用它来指向结果。
当资源应该准备好时,客户端就可以获取该资源。这意味着您需要一些 short-term 坚持。