从ASP .Net Web API导出到HTML格式的Excel

时间:2017-06-22 14:07:50

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

我的HTML页面中有导出到Excel按钮,单击按钮我将向ASP .Net Web API发送GET请求,该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�=�

如何下​​载文件?我不想使用表格

下面是我点击导出按钮时的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);

1 个答案:

答案 0 :(得分:0)

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