通过jQuery中的下载链接解析CSV文件?

时间:2015-11-20 11:53:24

标签: jquery ajax csv google-api cors

因此,我使用Google DFA Reporting API提取广告系列报告文件列表并下载最新版本。

function transferData() {
    var getFile = gapi.client.dfareporting.reports.files.get({
        'profileId': '12345', // My DFA profile ID
        'reportId': reportId, // The ID of the report type
        'fileId': runId // The ID of the final report (corresponding to the report type defined earlier)
    });
    getFile.then(function (response) {
        var URL = response.result.urls.browserUrl;
        window.open(URL); // Open the download link
    }, function (reason) {
        console.log('Error: ' + reason.result.error.message);
    });
}

这段代码返回URL变量,该变量本质上是CSV报告文件的下载链接,例如, https://storage.googleapis.com/dfa_-700df587fcd884268484ea3d1/campaign_report.csv?GoogleAccessId=12345m@developer.gserviceaccount.com&Expires=12345&Signature=12345

但是现在我需要以某种方式解析这个CSV文件。我以前做的是立即让用户重新上传他们刚下载的CSV文件,这样我就可以通过PHP解析服务器端了。但是,我想避免下载然后上传过程并稍微自动化一些事情。我尝试使用AJAX,但偶然发现了一个CORS错误,说明交叉来源请求被阻止了。使用jsonp作为数据类型会绕过CORS错误,但无法使用,因为服务器返回了一个CSV文件,对吗?

那么我可以通过API为我提供的下载URL以某种方式自动解析CSV文件,而不需要用户在下载后立即重新上传CSV吗?

1 个答案:

答案 0 :(得分:0)

您有几个选择:

选项1 让用户将文件的URL发送回服务器,而不是下载文件并重新上传。然后,服务器可以下载并解析文件本身。

选项2 为javascript编写自己的csv解析器,使用像string.split这样简单的东西可以用于你知道格式的非常基本的csv。

选项3 使用像Papa Parse这样的csv解析库在浏览器中为你做一些硬盘。

您可以使用以下代码实现选项2或3:

<script>

function loadDoc(url) {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (xhttp.readyState == 4 && xhttp.status == 200) {
      parseFile(xhttp.responseText);
    }
  };
  xhttp.open("GET", url, true);
  xhttp.send();
}

function parseFile(csvFile){
  //contents of the csv file are now in csvFile
  alert(csvFile);
}

</script>