通过POST ajax调用下载文件

20 浏览
0 Comments

通过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,或者直接下载而不显示?

0
0 Comments

在这种情况下,最好的解决方案是:

在您的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请求找到并获取文件,并在获取后从服务器上删除文件。同时,您还可以创建一个服务来定期删除旧文件,以确保服务器上的文件保持更新。

0