【问题标题】:POST response with file and JSON带有文件和 JSON 的 POST 响应
【发布时间】:2014-11-27 21:15:21
【问题描述】:

我有 POST 方法,它以文件响应。在文件下载后,我还想在 UI 上显示在代码中创建文件期间生成的消息(是否有任何错误,文件中是否包含所有项目等)。

我的问题是如何以最合适的方式实现这种行为?

现在我有两个想法:

  1. 下载后立即发送另一个 POST 方法,该方法将返回 带有消息内容的 JSON。这似乎很复杂 因为我应该将消息存储在服务器对象上 每个创建的文件
  2. 发送具有相同响应的 cookie,其中将包含消息 内容

【问题讨论】:

    标签: asp.net json http post http-post


    【解决方案1】:

    我认为您的两种解决方案在理论上都应该有效。我在这里假设使用八位字节流响应发回的 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
    

    它使您能够始终立即响应并在前端执行一些很酷的进度条。如果处理密集,你也可以有一个队列系统。但不利的一面是,您需要将处理器编写为一个单独的模块,并让它与数据库或保存状态的东西通信。

    其他

    我的一些其他想法包括:

    • 将元数据存储在文件本身中。 (响应文件格式是什么?)
    • 使用多部分响应(尚不确定浏览器在此方面的兼容性如何)
    • 如果 cookie 不足以容纳所有消息,请结合使用您的两个想法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-11
      • 2020-11-03
      • 1970-01-01
      • 1970-01-01
      • 2013-03-04
      • 2017-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多