jquery接收后端文件流实现下载功能

$.ajax({
              url:urlSave,
              type:'POST',
              cache: false,
              xhr: function () {
                var xhr = new XMLHttpRequest();
                xhr.onreadystatechange = function () {
                  if (xhr.readyState == 2) {
                    if (xhr.status == 200) {
                      xhr.responseType = "blob";
                    } else {
                      xhr.responseType = "text";
                    }
                  }
                };
                return xhr;
              },
              headers: {
                "Content-Type": "application/json",
              },
              data:obj,
              success:function(res){
                download(res,fileNmae)
              },
            })

ajax部分

        function download(data, filename, mime, bom) {
          var blobData = typeof bom !== "undefined" ? [bom, data] : [data];
          var blob = new Blob(blobData, { type: mime || "application/octet-stream" });
          if (typeof window.navigator.msSaveBlob !== "undefined") {
            // IE workaround for "HTML7007: One or more blob URLs were
            // revoked by closing the blob for which they were created.
            // These URLs will no longer resolve as the data backing
            // the URL has been freed."
            window.navigator.msSaveBlob(blob, filename);
          } else {
            var blobURL =
              window.URL && window.URL.createObjectURL
                ? window.URL.createObjectURL(blob)
                : window.webkitURL.createObjectURL(blob);
            var tempLink = document.createElement("a");
            tempLink.style.display = "none";
            tempLink.href = blobURL;
            tempLink.setAttribute("download", filename);

            // Safari thinks _blank anchor are pop ups. We only want to set _blank
            // target if the browser does not support the HTML5 download attribute.
            // This allows you to download files in desktop safari if pop up blocking
            // is enabled.
            if (typeof tempLink.download === "undefined") {
              tempLink.setAttribute("target", "_blank");
            }

            document.body.appendChild(tempLink);
            tempLink.click();
            // Fixes "webkit blob resource error 1"
            setTimeout(function () {
              document.body.removeChild(tempLink);
              window.URL.revokeObjectURL(blobURL);
            }, 200);
          }
        };

blob部分

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要在前端使用ajax向后端发送请求,并在请求中设置responseType为blob,以便获取二进制数据。同时,你需要在后端将excel文件转换成二进制数据并返回给前端。 以下是一个使用jQuery前端示例代码: ```javascript $.ajax({ url: 'your-backend-url', method: 'POST', responseType: 'blob', // 设置返回数据类型为二进制 success: function(data) { // 创建一个a标签,将二进制数据转换为URL,并设置下载属性 var a = document.createElement('a'); var url = window.URL.createObjectURL(data); a.href = url; a.download = 'file.xls'; // 将a标签添加到文档中,并自动触发点击事件下载文件 document.body.appendChild(a); a.click(); // 下载完成后,释放URL对象 window.URL.revokeObjectURL(url); } }); ``` 在后端,你可以使用EPPlus或NPOI等库来将Excel文件转换为二进制数据,并将其作为响应返回给前端。以下是一个使用EPPlus的后端示例代码: ```csharp using OfficeOpenXml; // ... [HttpPost] public IActionResult DownloadExcel() { // 读取Excel文件 var fileInfo = new FileInfo("path/to/file.xlsx"); using (var package = new ExcelPackage(fileInfo)) { // 获取工作表 var worksheet = package.Workbook.Worksheets[0]; // 将工作表转换为二进制数据 var data = worksheet.ConvertToBinary(); // 返回二进制数据 return File(data, "application/vnd.ms-excel", "file.xls"); } } ``` 注意,以上代码仅供参考,具体实现可能会因为框架和库的不同而有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值