无法将数据流从 AJAX 响应转换为 CSV 文件

Posted

技术标签:

【中文标题】无法将数据流从 AJAX 响应转换为 CSV 文件【英文标题】:Unable to convert data stream from AJAX response to CSV file 【发布时间】:2021-04-07 17:43:02 【问题描述】:

我正在尝试将 ajax 响应转换为 csv 文件,该响应是带有一些垃圾字符(可能是 blob 或字节流或字节数组不确定)的数据流。在下载的文件中,我也得到了相同的垃圾数据。

$.ajax(
  url: requestUrl,
  type: "POST",
  async: false,
  data: data_request_clientside,
  contentType: 'application/json;charset=utf-8',
  dataType: 'text',
  success: function (response) 
    var binary = "";
            var responseTextLen = response.length;

            for ( i = 0; i < responseTextLen; i++ ) 
                binary += String.fromCharCode(response.charCodeAt(i) & 255);
            
            var a = document.createElement('a');
            a.href = "data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml;base64," + btoa(binary);
            a.download = 'workingStuff.csv';
            document.body.appendChild(a);
            a.click();
            a.remove();
  ,
  error: function (error) 
    console.log("Something went wrong", error);
  
); 

【问题讨论】:

【参考方案1】:
            var blob = new Blob([csvString]);
        if (window.navigator.msSaveOrOpenBlob)  // IE hack; see http://msdn.microsoft.com/en-us/library/ie/hh779016.aspx
            window.navigator.msSaveBlob(blob, "filename.csv");
        else
        
            var a = window.document.createElement("a");
            a.href = window.URL.createObjectURL(blob, type: "text/plain");
            a.download = "filename.csv";
            document.body.appendChild(a);
            a.click();  // IE: "Access is denied"; see: https://connect.microsoft.com/IE/feedback/details/797361/ie-10-treats-blob-url-as-cross-origin-and-denies-access
            document.body.removeChild(a);
        

只需将代码放在成功函数下,根据需要稍作修改即可,尚未测试

【讨论】:

感谢您的帮助!!我已经试过了,这也只是提供垃圾数据......我仍在努力,只是知道响应是编码数据 - 传输编码分块。试图找到相同的解码。

以上是关于无法将数据流从 AJAX 响应转换为 CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用 BeautifulSoup 将数据从列表正确转换为 CSV 文件?

pandas CSV 文件读取不会将数据类型从 object 转换为 int

将 d3.csv 方法转换为 d3.csv.parse 方法

如何将导入 python 的数据从 csv 文件转换为时间序列?

如何在前端(TS、React)上将 CSV 转换并下载到 XLSX

Linq to CSV:将数据转换为 .CSV 文件并从操作中返回文件,而不在服务器上保存文件