【问题标题】:Export to Excel in HTML from ASP .Net Web API从 ASP .Net Web API 以 HTML 格式导出到 Excel
【发布时间】:2017-06-28 20:55:47
【问题描述】:

我的 HTML 页面中有“导出到 Excel”按钮,单击该按钮我会将 GET 请求发送到 ASP .Net Web API,后者从数据库中获取数据并返回 HTTPContext 二进制响应。在前端,我正在获取 Excel 文件的二进制数据。收到响应后如何直接下载文件?

            HttpContext.Current.Response.ClearContent();
            FileStream objFileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            byte[] excelResponse = new byte[objFileStream.Length];
            objFileStream.Read(excelResponse, 0, excelResponse.Length);
            HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", fileName));
            HttpContext.Current.Response.BinaryWrite(excelResponse);

我的前端二进制内容

PKS��J�ɉ�fxl/workbook.xml �(��P�N�0����SA5������8�����4�Z^���8�I�n"�+�Y�����|}����ጉ�V,����V�����v��OJ�=�

如何下​​载为文件?我不想使用 form

下面是我在单击导出按钮时进行的 AJAX 调用。

 // Make AJAX call
    $.ajax({
        type: "GET",
        url: "http://localhost:8899/api/ExportDataToExcel/",
        data: oData,
        headers: {
            "Authorization": "Bearer " + sToken,
        },
        success: function (oResult) {
            onSuccess(oResult);
        },
        error: function (oResponse) {
            onFailure(oResponse);
        }
    });

这就是我在单击“导出到 Excel”按钮时所做的一切。

如果我使用表单提交,那么我会收到授权被拒绝错误,因为 API 需要不记名令牌。以下代码给出授权被拒绝错误

      var form = document.createElement("form")
      form.action = url + 'exportDataToExcel/';
      form.method = "GET";
      document.body.appendChild(form);
      form.submit(true);
      document.body.removeChild(form);

【问题讨论】:

  • 你前端的代码是什么?有很多问题都在问同一个问题。例如:stackoverflow.com/questions/28165424/…
  • 所有帖子都用 FORM 和 FORM submit 进行解释。如果我使用 form submit 并调用相同的 GET 方法,那么它就可以工作。但是我为什么要使用 FORM?
  • 你真的可以在这里添加你的前端代码吗?没有它,没有人可以帮你解决这个问题。
  • 我现在编辑并添加了API方法调用..实际上在html中只有按钮标签和onclick有

标签: javascript html asp.net-web-api export-to-excel


【解决方案1】:

我通过用 XMLHttpRequest 替换 AJAX 解决了这个问题,因为 AJAX 无法接收二进制缓冲区响应。收到 XHR 的响应后,我将创建 JavaScript Blob,然后创建锚标记并将该锚元素重定向到 BlobObjectURL。

【讨论】:

    猜你喜欢
    • 2015-08-22
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    相关资源
    最近更新 更多