请教一个下载会跳转链接的问题

发布于 2022-09-13 01:25:19 字数 438 浏览 12 评论 0

请教一下,拿到了一个链接,,302跳转后才是可以下载的文件,如何在js中实现点击下载这个链接跳转后的文件。 常规写法无效,如下:

var filename = "a.mp4";
let link = document.createElement('a')
document.body.appendChild(link)
 link.style.display = 'none'
link.href = http://aaa/bbb
link.download = filename
link.click()
document.body.removeChild(link)
window.URL.revokeObjectURL(blobUrl);          

因为href 带的是会302的链接,索引上述实现只会在当前页面打开mp4文件。
如何能实现直接打开另存为的窗口,下载跳转后的文件呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

尹雨沫 2022-09-20 01:25:19

没办法,你代码看上去是没毛病的。那么问题就出在跨域上了,那么解决办法有什么呢?

  1. 不跨域,不就是下载了嘛

    1. 通过 download 属性来表述资源需要下载,而不是打开。pc兼容性较差,移动端不支持
  2. 通过服务端设置下载头 Content-disposition: attachment

    1. 通过下载头来告诉浏览器,资源需要下载。兼容性极佳(ie 都支持)。
  3. content-type 改成默认流 object-stream

    1. 隐藏资源类型,让浏览器无法解析,从而触发下载。兼容性也还可以,主要用在和下载头配合使用,防止 pdf 之类的文件被预览。
少女情怀诗 2022-09-20 01:25:19

可以使用这个库下载解决跨域问题
https://github.com/eligrey/Fi...
它实现原理是利用这个特性Blob

如果你想下载成百上千个文件,那我推荐你使用这个库https://github.com/jimmywarti...
结合
https://github.com/keithwhor/...
多线程库
可以实时下载后实时打包zip 而且利用了serve worker 浏览器不会卡顿

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文