百度云文件直接下载思考
July 03, 2020
1091
对于超过一定大小的文件百度云需要下载其客户端工具才能下载。
虽然我们能够获得下载的链接,但是因为百度云在验证模块加入了头部验证导致一般浏览器无法使用内置的下载器下载文件。 虽然这一步骤用第三方下载器可以下载,但操作步骤比较繁琐。
为了解决这个问题, 所以想出了在浏览器的缓存块中下载文件, 并将下载完后的 blob 数据重新打包的想法。
问题:
- 无法下载大文件, 通常大于 500MB 大小的文件
- XHR API 改成 fetch API
- 下载大文件调用 blob 处理时, 非常耗时
- XHR API 改成 fetch API 后 改成流处理Streams API
- 使用 fetch 之后 User-agent 不能自定义
- 使用插件更改(user-agent-switcher), 或者开发专用插件(计划中)
————————————-
以上问题用 GM_download 完美解决 Orz
2、后台处理接口实现下载进度条
public void aaa()
{
string result = string.Empty;
for (int i = 1; i <= 6000; i++)
{
result += i.ToString();
int len = result.Length;
Response.Headers.Add("Content-Length", len.ToString());
Response.Headers.Add("Content-Encoding", "UTF-8");
Response.Write(result);
}
}
注意到 ::
Response.Headers.Add(“Content-Length”, len.ToString());
Response.Headers.Add(“Content-Encoding”, “UTF-8”);
写出 http 头时候,附加 “Content-Length”和 Content-Encoding,
这样 JS 端的 progress 事件的 event.lengthComputable 值才会为 true
, event.total 才会在数据传输完毕之前取得值,
否则 event.lengthComputable 值会返回 false
, event.total 在数据完成之前值都是0
。
- 本文作者:Wenhua Chen
- 本文链接:https://wenhuachen.com/2020/07/03/%E7%99%BE%E5%BA%A6%E4%BA%91%E6%96%87%E4%BB%B6%E7%9B%B4%E6%8E%A5%E4%B8%8B%E8%BD%BD/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!