我有POST方法响应文件。文件下载后我还想在UI上显示消息,这是在代码中创建文件期间生成的消息(如果有任何错误,文件中包含所有项目等)。
我的问题是如何以最恰当的方式实施这种行为?
现在我有2个想法:
答案 0 :(得分:0)
我认为你的两个解决方案都应该在理论上运作。我在这里假设通过八位字节流响应发回的cookie标头将被尊重并且可以通过javascript立即访问。我自己没试过这个。
我还有两个想法可能会给你一些灵感:
<强>简单强>
在将文件输出给用户之前的POST处理程序中,您可以设置包含要显示的消息的会话变量。然后在下载文件后,发出第二个请求以从会话中获取该消息。由于每次都会被覆盖,如果用户一次发出大量的POST,可能会有点不可靠。
更复杂
对于完全异步的解决方案,过去我以这种方式使用服务:
POST /process_this -> "{'status':'ok', 'id':123}"
GET /status?id=123 -> "{'status':'processing', 'progress':'45%'}"
GET /status?id=123 -> "{'status':'processing', 'progress':'85%'}"
GET /status?id=123 -> "{'status':'ready', 'meta':{'data':'message'}}"
GET /download?id=123 -> Binary file stream
它使您能够始终立即响应,并在前端做一些很酷的进度条。如果处理密集,您也可以拥有一个队列系统。但在缺点方面,您需要将处理器编写为单独的模块,并将其与数据库或节省状态的内容进行通信。
其他强>
我包括的其他一些想法: