前端如何处理手机上的 uc、qq 浏览器等下载后端传过来的二进制数据?

2020-03-02 16:23:42 +08:00
 waiaan

后端传的是二进制数据,前端用

let data = res.data;
let url = window.URL.createObjectURL(new Blob([data],{type:someType));
let link = document.createElement("a");
link.href = url;
document.body.appendChild(link);
link.click();

手机上用 chrome 可以下载,用 qq、uc 等浏览器一直显示下载失败。

谢谢!

3373 次点击
所在节点    JavaScript
12 条回复
LyleRockkk
2020-03-02 16:27:09 +08:00
这个本来就有兼容性问题的,换方案吧
free9fw
2020-03-02 16:31:31 +08:00
试试我的方法 aHR0cDovL2Jsb2cuY3BlYXNlLmNvbS8yMDE5LzAyLzI2L0Rvd25sb2FkLWZpbGVzLWluLXdlY2hhdC8=
tommyZZM
2020-03-02 16:32:55 +08:00
可以考虑用用 File API
wunonglin
2020-03-02 16:34:10 +08:00
本明显他们不支持
waiaan
2020-03-02 17:06:02 +08:00
@free9fw 你这个不能处理二进制的吧?
ysc3839
2020-03-02 19:26:23 +08:00
试试用 data uri ?仍然不行的话就是那些浏览器的问题了。
DOLLOR
2020-03-02 22:38:32 +08:00
link.href = 'application/octet-stream;base64,文件的 BASE64 内容';
link.download = '文件名.扩展名';
DOLLOR
2020-03-02 22:39:31 +08:00
上面错了,改一下。
link.href = 'data:application/octet-stream;base64,文件的 BASE64 内容';
link.download = '文件名.扩展名';
waiaan
2020-03-03 09:52:24 +08:00
@DOLLOR
这个在手机 qq 和 uc 浏览器下能用吗?
free9fw
2020-03-03 10:27:30 +08:00
@waiaan 不用二进制,直接用你请求的 URL
waiaan
2020-03-03 10:54:04 +08:00
@free9fw
感谢解答,不过我请求的 url 还需要 post 传参的。
waiaan
2020-03-03 11:25:08 +08:00
@DOLLOR
测试了一下,都不行,下载失败。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/649136

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX