Jquery - 从服务器分块下载数据并继续附加到客户端上的文件

问题描述 投票:0回答:0

我的数据以 JSON 格式驻留在 Postgres 服务器中。数据有数十万行。我希望向用户提供一个链接,以分块下载数据,即。不是一次所有数据,因为它会阻塞服务器上的内存。因此,我有一个 API 可以调用以循环获取有限的数据。我希望在从服务器收到响应后立即将数据以 CSV 格式写入客户端上的文件。

通常,我找到的解决方案是根据服务器的响应在客户端上构建数组,并且不会在收到响应后立即写入文件,当文件下载完成后,他们会将整个数组写入一次归档。但这里的问题是它开始消耗客户端的内存,因为你现在正在客户端上构建那个巨大的数据块,直到你将它写入文件。

所以我想采取的方法是,一旦从服务器检索到响应,我希望开始将其附加到文件中,这样我就不必将数据保存在客户的内存中。

我有这段代码正在执行普通数组到 CSV 的转换,但它没有将数据附加到同一个文件,而是创建了多个文件。

const writeDataToFile = (data) => {
    const rows = data.map((obj) => Object.values(obj).join(delimiter));
    const csvContent = rows.join('\n');
    const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
    if (navigator.msSaveBlob) {
      navigator.msSaveBlob(blob, filename);
    } else {
      const link = document.createElement('a');
      if (link.download !== undefined) {
        const url = URL.createObjectURL(blob);
        link.setAttribute('href', url);
        link.setAttribute('download', filename);
        link.setAttribute('target', '_blank');
        link.style.visibility = 'hidden';
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
      }
    }
  };
javascript jquery jquery-plugins javascript-objects
© www.soinside.com 2019 - 2024. All rights reserved.