如何将csv文件保存到本地路径,而不是将其下载?

时间:2019-11-25 10:35:38

标签: angular typescript

我正在使用angular ts,并尝试在本地保存csv文件,而不是下载它,有人可以帮助我吗,我不知道如何。 首先,我将内容保存在一个数组中,清理它,然后尝试在本地保存它(最好在aseets文件夹中,但是我认为它是只读的,对吗?)。我有货了。

这是我的代码:

 exportToCsv(filename: string, rows: object[]) {
    if (!rows || !rows.length) {
      return;
    }
    const separator = ',';
    const keys = Object.keys(rows[0]);
    const csvContent =
      keys.join(separator) +
      '\n' +
      rows.map(row => {
        return keys.map(k => {
          let cell = row[k] === null || row[k] === undefined ? '' : row[k];
          cell = cell instanceof Date
            ? cell.toLocaleString()
            : cell.toString().replace(/"/g, '""');
          if (cell.search(/("|,|\n)/g) >= 0) {
            cell = `"${cell}"`;
          }
          return cell;
        }).join(separator);
      }).join('\n');



// not working
     /*  //if (this.plt.is('cordova')) 
        this.file.writeFile('.\\src\\assets', filename, csvContent, {replace: true}) */

// download
   /*  const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
    if (navigator.msSaveBlob) { // IE 10+
      navigator.msSaveBlob(blob, filename);
    } else {
      const link = document.createElement('a');
      if (link.download !== undefined) {
        // Browsers that support HTML5 download attribute
        const url = URL.createObjectURL(blob);
        link.setAttribute('href', url);
        link.setAttribute('download', filename);
        link.style.visibility = 'hidden';
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
      } */

  }

1 个答案:

答案 0 :(得分:1)

您需要后端服务才能完成此任务。 Angular从ts文件构建javascript。由于存在安全风险,浏览器中的Java语言无法直接修改计算机上的数据。浏览器可以处理您的前端站点,如盒子。