通过POST ajax调用下载文件
通过POST ajax调用下载文件
我有一个Asp.Net MVC项目,在我的视图中有以下代码:\n
$.ajax({ beforeSend: function () { LoadStart(); }, complete: function () { LoadStop(); }, //async: false, contentType: 'application/json, charset=utf-8', dataType: 'json', type: 'POST', url: '@Url.Action("MyAction", "MyController")', data: JSON.stringify( { Param1: 1, Param2: 2 }), success: function (data) { $("#pdf-content").show(); // 在这里,用PDF填充DIV(pdf-content)。 }, fail: function () { alert("失败"); } });
\n
\n在MyAction
中,我有以下代码:\n
[HttpPost] public ActionResult MyAction(int Param1, int Param2) { // 代码... MemoryStream stream = new MemoryStream(); outPdf.Save(stream); byte[] fileContents = stream.ToArray(); return File(fileContents, "application/pdf", "myFile.pdf"); }
\n
\n我该如何在DIV中显示PDF,或者直接下载而不显示?
在这种情况下,最好的解决方案是:
在您的POST方法中,使用唯一名称(例如GUID)保存文件在服务器上,并将此guid返回给客户端。
然后进行get请求,通过guid找到您的文件并将文件返回给客户端,然后从服务器上删除文件。
而且最好创建一个服务,用于删除所有旧文件。
我就是这样做的。但是我没有将文件保存在服务器上,而是将字节数组保存在会话中。
代码示例:
// POST请求 $.ajax({ type: "POST", url: "your-url", data: yourData, success: function(response) { // 从响应中获取GUID var guid = response.guid; // GET请求 $.ajax({ type: "GET", url: "your-file-url" + "?guid=" + guid, success: function(fileData) { // 将文件数据返回给客户端 // ... // 从服务器上删除文件 $.ajax({ type: "DELETE", url: "your-delete-url" + "?guid=" + guid, success: function() { // 文件删除成功 // ... }, error: function() { // 文件删除失败 // ... } }); }, error: function() { // 获取文件失败 // ... } }); }, error: function() { // 保存文件失败 // ... } });
通过以上方法,您可以通过POST请求将文件保存在服务器上,并通过GUID将文件返回给客户端。然后,您可以通过GET请求找到并获取文件,并在获取后从服务器上删除文件。同时,您还可以创建一个服务来定期删除旧文件,以确保服务器上的文件保持更新。