首页 > 其他分享 >JS实现下载文件

JS实现下载文件

时间:2023-02-14 09:12:56浏览次数:39  
标签:文件 name elm url getElementsByClassName JS var document 下载

最近需要下载一些视频,数量不算多,百十个,动态加载比较多,写爬虫比较麻烦,想想不如直接做个书签JS直接点点鼠标下载了。

第一个:直接打开链接

javascript:(function() {var uri_enc = document.getElementsByClassName("xxx")[0].src;window.open(uri_enc);}) ();

但是这样文件名是默认文件名,
于是第二个:创建一个a标签,然后点击。

javascript:(function() {var url = document.getElementsByClassName("url")[0].src; const a = document.createElement("a"); a.href = url; a.download = document.getElementsByClassName("name")[0].innerText.split(":",)[1]; a.name=document.getElementsByClassName("name")[0].innerText.split(":",)[1]; a.click(); a.remove(); })();

但是对于PDF、视频是无效的,浏览器会直接浏览而不是默认下载。
想想还是改进下第一个方案。
从页面提取想要的字符串做文件名
第三版:

javascript:(function() { var elm = document.createElement('textarea'); var str= document.getElementsByClassName("name")[0].innerText.split(":",)[1]; elm.value = str; document.body.appendChild(elm); elm.select(); document.execCommand('copy'); document.body.removeChild(elm); var uri_enc = document.getElementsByClassName("url")[0].src; window.open(uri_enc); }) ();

但是要多操作两次键盘,于是想通过获取blob来实现下载视频
第四版:

javascript:(function (){ var url=document.getElementsByClassName("url")[0].src; var name=document.getElementsByClassName("name")[0].innerText.split(":",)[1]; fetch(url) .then(res => res.blob()) .then(blob => { const a = document.createElement("a"); const objectUrl = window.URL.createObjectURL(blob); a.download = name; a.href = objectUrl; a.click(); window.URL.revokeObjectURL(objectUrl); a.remove(); }) }) ();

但是实际使用效果有些差,fetch要全部缓存下来才显示下载窗口。等待时间过长了,不如用第三版多操作两下,可以达到类似多线程的效果。

标签:文件,name,elm,url,getElementsByClassName,JS,var,document,下载
From: https://www.cnblogs.com/instr/p/17118527.html

相关文章

  • 如何导入定制的CAD图层?CAD图层文件导入步骤
    在CAD制图过程中,如果想要导入定制的CAD图层该如何操作?本文小编就以浩辰CAD建筑软件为例,给大家分享一下CAD图层文件导入的具体操作步骤吧!CAD图层文件导入步骤:首先要知道浩......
  • springboot自动配置原理以及spring.factories文件的作用详解
    一、springboot自动配置原理先说说我们自己的应用程序中Bean加入容器的办法:packagecom.ynunicom.dc.dingdingcontractapp;importcom.alibaba.druid.spring.boot.au......
  • Linux管理文件命令-tail查看文件结尾的内容
    前言    前面有学习了查看文件开头的内容,那么自然就会有查看结尾的内容,这个命令不仅可以作为查看结尾的内容,还可实时查看文件更新的状态等信息,让我们一起来看看这个......
  • spark读写文件
    valpath="/Volumes/Data/BigData_code/data/retail-data/by-day/2010-12-01.csv"spark.read.format("csv").option("header","true").option("inferSchema","t......
  • 下载 VMware Workstation Pro
    https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html......
  • SharePoint Online 分享文件夹提示功能禁用
    前言最近使用SharePointOnline站点的时候,分享文件夹出现了这个提示(Sharingfoldersisdisabled),没办法给文件夹授权。正文1.提示的信息截图,如下图: ......
  • GitHubDesktop下载
    GitHubDesktop下载这玩意官网下载速度特别慢如果不想等待的可以戳下面链接进行下载会实时同步更新的下载地址:GitHubDesktop下载......
  • python文件I/O
    1、打印到控制台:printif__name__=='__main__':print('hello')2、读取键盘输入:inputif__name__=='__main__':str1=input('请输入:')print(str1)3、打开......
  • 8.7 可执行文件运行时的必要条件
    在程序运行时,虚拟的内存地址会转换成实际的内存地址。链接器会在EXE文件的开头,追加转换内存地址所需的必要信息。这个信息称为再配置信息。EXE文件的再配置信息,就成为了变......
  • 8.6 DLL文件及导入库
    Windows以函数的形式为应用提供了各种功能。这些形式的函数称为API(应用程序接口)。例如,Samplel.c中调用的MessageBox0不是C语言的标准函数,而是Windows提供的API的一种。M......