gpt4 book ai didi

javascript - 从 JQuery Ajax 处理 FileResult

转载 作者:数据小太阳 更新时间:2023-10-29 04:40:18 29 4
gpt4 key购买 nike

我有一个返回 FileResult 的 MVC C# Controller

    [HttpPost]
public FileResult FinaliseQuote(string quote)
{
var finalisedQuote = JsonConvert.DeserializeObject<FinalisedQuote>(System.Uri.UnescapeDataString(quote));

return File(finalisedQuote.ConvertToPdf(), "application/pdf");
}

现在我希望能够下载结果(我不希望它在浏览器中打开)我在 JavaScript 中通过 $.ajax 方法调用 Controller

var postData = { quote: finalisedQuote };

var url = "/NewQuote/FinaliseQuote";

$.ajax({
type: "POST",
url: url,
data: postData,
success: function (data) {
//how do I handle data to force download
},
fail: function (msg) {
alert(msg)
},
datatype: "json"
});

如何处理数据以强制下载?

最佳答案

您将无法使用 JavaScript 将文件保存到磁盘,因为出于安全原因,这已被阻止。

另一种方法是将文件保存在 FinaliseQuote 操作方法中(并只返回文件的 ID),然后创建另一个响应 GET 请求并返回文件的操作方法。然后在您的成功函数中设置 window.location.href 以指向您的新操作方法(您需要为该文件传递一个 id)。还要确保将 MIME 类型设置为 application/octet-stream,这会强制浏览器下载文件。

Controller :

[HttpPost]
public JsonResult FinaliseQuote(string quote)
{
var finalisedQuote = JsonConvert.DeserializeObject<FinalisedQuote>(System.Uri.UnescapeDataString(quote));

// save the file and return an id...
}

public FileResult DownloadFile(int id)
{
var fs = System.IO.File.OpenRead(Server.MapPath(string.Format("~/Content/file{0}.pdf", id)));

// this is needed for IE to save the file instead of opening it
HttpContext.Response.Headers.Add("Content-Disposition", "attachment; filename=\"filename\"");

return File(fs, "application/octet-stream");
}

JS:

success: function (data) {
window.location.href = "/NewQuote/DownloadFile?id=" + data;
},

关于javascript - 从 JQuery Ajax 处理 FileResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30661728/

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