【问题标题】:Download file generated on the fly using POST data下载使用 POST 数据动态生成的文件
【发布时间】:2012-09-12 15:47:10
【问题描述】:

我需要使用从 POST 请求中获得的一些数据生成 PDF 文件。作为对此请求的响应,我想发送生成的 PDF 文件,用户应该得到一个“文件另存为”对话框。

这一切都应该即时发生。我不想将 PDF 保存到磁盘并通过附加请求提供它。这一切都应该发生在一个请求中。

但我不知道我是如何做到这样的事情的。如果我使用 XMLHttRequest,则无法显示“文件另存为”对话框。另一方面,如果我使用表单,则无法在没有 URL 加密开销的情况下发送 POST 数据。

有人有想法吗?

【问题讨论】:

  • 单独在客户端使用 JS 生成 PDF 可能是您的选择吗?这可能很有趣:stackoverflow.com/questions/742271/…
  • “URL 加密开销”...那是什么?
  • 如果不想使用该 PDF JS 库,则将其临时保存到服务器内存将是另一种选择。这将通过您使用的任何服务器端语言的服务器端代码来完成。但是仍然会有额外的请求开销 :(( - 我猜你真的希望客户端生成 PDF,在这种情况下,我猜那个 JS 库或者一些 Flash 东西会起作用。
  • @haackattack 我猜他的意思是“通过网络发送的 POST 请求的开销”,而不是 SSL 方面的加密。加密可能不是正确的词,但我认为这就是 OP 的意思。
  • @hackattack 使用表单,我无法完全设置 POST 请求的主体,而是可以定义值,然后对其进行 urlencoded。示例正文:“&myjsondata={title:'hello'}”,其中“&myjsondata=”只是不必要的开销。使用 xhr 我可以将正文设置为 "{title:'hello'}"

标签: javascript rest post xmlhttprequest download


【解决方案1】:

最后,我用 2 个请求解决了它。首先将所需的数据发送到服务器并从中创建 PDF,然后返回临时文件的 ID。第二个下载pdf并删除临时文件。

【讨论】:

    【解决方案2】:

    我通过将数据从 javascript 生成的表单字段发布到 php 来做到这一点。

    var form = $('<form method="post" action="svgoutput/convert.php"> <input type="text"  name="incomingSvgData" value="'+base64_encode(svgDataString)+'"><input type="submit" value="Submit Post"> </form> ');
    form[0].submit();
    

    对于 IE,表单在提交时位于 dom 中。

    在 php 方面,我做我的生成和东西(在这种情况下是 SVG 到 PNG)并设置以下标题:

    header("Content-Type: YOURMIMETYPE");
    header("Content-Disposition: attachment; filename=YOURFILENAME.EXT");
    echo YOURDATA;
    

    即使只在一篇文章中显示另存为对话框,也可以顺利下载。如果您需要另存为,只需使用标题,就像这里How to show 'Save as' dialog box using PHP for text files

    【讨论】:

      猜你喜欢
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      • 2023-02-24
      相关资源
      最近更新 更多