我有以下操作返回PDF:
raise SystemExit
(忽略FileStream,仅用于测试)
结果基本上是PDF本身,但它没有下载,我如何下载输出PDF?我应该还给别的东西吗?我尝试使用FileResult,但它的情况基本相同。
这就是我目前正在阅读"该文件通过Ajax:
[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());
}
}
感谢。
编辑:
使用Stephen Muecke提供的this帖子中的解决方案
答案 0 :(得分:2)
通过ajax下载文件不起作用,因为数据最终在JS对象的内存中,而不是在用户的设备上。最终,您需要使用普通的HTTP请求并返回FileResult。
但是在您的情况下,您还需要首先上传一些需要在下载之前添加到PDF中的数据。这很尴尬,因为下载必须是在单独窗口中触发的GET请求(因为您之后需要应用程序保留在同一页面上)并且在查询字符串上提供该数据不太可行。
解决这个问题的方法是分两个步骤:
1)在浏览器中,通过AJAX将数据上传到" EditPDF"行动方法。在操作方法中,使用新数据编辑PDF并保存。然后向客户端返回某种唯一ID,以识别正确的PDF。
2)当浏览器收到EditPDF方法的响应时,它会抓取返回的ID,并对" GetPDF"进行新的window.open
调用。动作的URL。此操作接受PDF ID作为查询字符串参数,因此在发出请求时很容易将其包含在URL中。此操作在服务器上找到正确的文档,并在FileResult中返回它。浏览器将下载文档,同时不影响正在浏览的HTML页面。