gpt4 book ai didi

javascript - 从 Ajax 下载返回的 PDF

转载 作者:行者123 更新时间:2023-11-29 20:53:11 25 4
gpt4 key购买 nike

我有以下返回 PDF 的操作:

[HttpPost]
public string GetPDF(string data, float scaleFactor)
{
var result = JArray.Parse(data);
using (var fs = new FileStream(@"c:\pdf\pdftest.pdf", FileMode.Create))
{
MemoryStream ms = (MemoryStream)PdfMaker.CreatePDF(scaleFactor, result, dt);
ms.WriteTo(fs);
return Convert.ToBase64String(ms.ToArray());
}
}

(忽略FileStream,那只是为了测试)
结果基本上是 PDF 本身,但没有下载,如何下载输出的 PDF?我应该退回其他东西吗?我尝试使用 FileResult,但情况基本相同。

这是我目前通过 Ajax“读取”文件的方式:

$.ajax({
type: "POST",
url: "home/GetPDF",
data: { data: JSON.stringify(data), scaleFactor: $("#sf").val() },
success: function (data) {

window.location = "data:application/pdf;base64, " + data;
}
});

谢谢。

编辑:

使用了 this 中的解决方案Stephen Muecke 提供的帖子

最佳答案

通过 ajax 下载文件不起作用,因为数据最终以 JS 对象的形式存在于内存中,而不是在用户的设备上。最终您需要使用普通的 HTTP 请求并返回一个 FileResult。

但是在您的情况下,您还需要先上传一些数据,这些数据需要在下载之前添加到 PDF 中。这很尴尬,因为下载必须是在单独窗口中触发的 GET 请求(因为之后您需要应用程序保持在同一页面上)并且在查询字符串上提供该数据不太可能实现。

解决这个问题的方法是分两步:

1) 在浏览器中,通过 AJAX 将您的数据上传到“EditPDF”操作方法。在 action 方法中,使用新数据编辑 PDF,并保存。然后将某种唯一 ID 返回给识别正确 PDF 的客户端。

2) 当浏览器收到来自 EditPDF 方法的响应时,它会获取返回的 ID,并对“GetPDF”操作的 URL 进行新的 window.open 调用。此操作接受 PDF ID 作为查询字符串参数,因此在发出请求时很容易将其包含在 URL 中。此操作在服务器上找到正确的文档,并在 FileResult 中返回它。浏览器将下载文档,同时不会影响正在浏览的 HTML 页面。

关于javascript - 从 Ajax 下载返回的 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50737110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com