如何下载存储在 S3 中的文件? (野生动物园不起作用)

How to download file that stored in S3 ? (safari doesn't work)

我希望能够从浏览器下载存储在 s3 中的 csv 文件,所以我使用 FileSaver.js.

编写了以下代码

import { saveAs } from 'file-saver';
  
const downloadUrl = () => {
    saveAs(
      'https://-----s3 url--- ',
      'filename'
    )
  }

<button onClick={downloadUrl}>click to download</button>


它在 chrome 和 firefox 中有效,但仅在 Mac 上的 safari 中有效,文件未下载,页面只是转换。 而且还有乱码。

为了解决这个问题 我尝试了如下其他方法,但它们没有用。

  <a
      href='https://-----s3 url--- '
      download
              >
      click to download
   </a>


有没有更好的方法来解决这个问题?

谢谢。

我和很多其他人有同样的问题:https://github.com/eligrey/FileSaver.js/issues/375

我所做的是创建一个功能来检查用户是否在 iOS/Safari 它在新 window 中打开文件,这样用户需要在另一个选项卡中按顺序进行额外的点击保存文件:

const download = result => {
  if (iOSUser) {
    window.location.replace(result, '_blank');
  } else {
    createDownloadLink(result);
  }
};

const createDownloadLink = (data) => {
  const a = document.createElement('a');
  a.setAttribute('target', '_blank');
  document.body.appendChild(a);
    a.download = data.fileName;
    const URL = window.URL || window.webkitURL;
    const downloadUrl = URL.createObjectURL(data.blob);
    a.href = downloadUrl;
    a.click();
    URL.revokeObjectURL(downloadUrl);
  document.body.removeChild(a);
};

const iOSUser =
  ['iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod'].includes(navigator.platform);