如何下载存储在 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);
我希望能够从浏览器下载存储在 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);