K.S*_*K.S 8 javascript anchor google-chrome download ios
我在 AWS S3 存储桶中保存了一个视频/mp4 文件,当用户单击某个图标时,应从客户端设备(手机或计算机)下载该文件。我首先使用fetch发出请求,然后根据响应创建一个blob对象。接下来,我使用 javascript 创建一个锚元素,我附加了 href 属性并触发它的点击,如下面的代码所示:
fetch(url, {
headers: new Headers({
'Content-Disposition': "attachment; filename='file-name.mp4'",
}),
}).then((response): void => {
if (!response.ok) {
console.log('Error', response);
}
response.blob().then((blob): void => {
let videoUrl = window.URL.createObjectURL(blob);
let a = document.createElement('a');
document.body.appendChild(a);
a.href = videoUrl;
a.download = 'file-name.mp4';
a.target = '_blank';
a.click();
document.body.removeChild(a);
});
});
Run Code Online (Sandbox Code Playgroud)
测试此代码时,它适用于 Android Chrome 和 iOS Safari,但不适用于 iOS Chrome。我可以看到一个请求被触发但没有任何反应,甚至没有打开一个新选项卡。我尝试了其他一些方法,例如使用FileSaver.js库,也尝试了像下面示例中的FileReader,但仍然无法正常工作。
fetch(url, {
headers: new Headers({
'Content-Disposition': "attachment; filename='file-name.mp4'",
}),
}).then((response): void => {
if (!response.ok) {
console.log('Error', response);
}
response.blob().then((blob): void => {
FileSaver.saveAs(blob, 'file-name.mp4');
});
});
fetch(url, {
headers: new Headers({
'Content-Disposition': "attachment; filename='file-name.mp4'",
}),
}).then((response): void => {
if (!response.ok) {
console.log('Error', response);
}
response.blob().then((blob): void => {
let reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = (): void => {
if (reader.result) {
let url = reader.result.toString();
window.open(url, '_blank');
}
};
});
});
Run Code Online (Sandbox Code Playgroud)
blob 类型是“应用程序/八位字节流”。有没有人遇到过类似的问题或有任何其他新方法的想法?谢谢!
| 归档时间: |
|
| 查看次数: |
1140 次 |
| 最近记录: |