下载文件后如何通知?

How do notification, after download file?

问题的本质是这样的:有一个controller,controller里面有一个方法生成一个excel文件。根据其需要生成的请求和return。文件生成时间较长1-2小时,同时需要高亮文字通知,请稍候。必须删除完成后通知。

我找不到我想要的解决方案。

对不起我的英语不好

  public ActionResult DownloadFile()
    {
         return new FileStreamResult(_exporter.Export(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    }

你只咬了一口响应苹果。如果您 return 一个文件结果,那就是您可以 return。在向用户提供有关状态的更新的同时处理此问题的唯一方法是在流外创建文件,然后进行长轮询或使用 Web 套接字定期更新用户。对此操作的请求只会排队创建文件,然后 return 常规查看结果。

无论如何,在请求-响应周期内发生特别长的 运行 操作是不明智的。 Web 服务器有一个线程池,通常称为 "max requests",因为每个请求都需要一个线程。通常默认设置为 1000 左右,并假设您要尽快清除线程。如果 1001 个人同时尝试请求此操作,则第 1001 个人将排队等待其他 1000 个线程中的一个空闲,这意味着他们可能要等待将近 4 个小时。即使您从来没有看到您的站点获得这种负载,它仍然是 DDoS 攻击的绝佳载体。只需向此 URL 发送几千个请求,您的服务器就会死锁。

此外,我不知道您在做什么,但是生成一个 Excel 文件需要 1-2 个小时绝对是疯了。要么你一次处理太多数据,并发回可能无法在 Excel 中正确打开的数 GB 文件,要么你执行此操作的过程严重未优化。