当前位置: 首页 > Web前端 > HTML5

解决服务上下载文件H5a标签的download属性跨域问题

时间:2023-04-05 19:15:07 HTML5

1。下载多媒体文件(图片/视频/文件等)最简单的方法是点击:下载文件如果url指向同源资源,这是正常的。如果url指向第三方资源,则下载失败,行为与不使用下载时相同——浏览器可以直接打开文件,无法打开的文件直接下载。该文件由浏览器打开,可以手动下载。方案一:将文件打包为.zip/.rar等浏览器打不开的文件下载。方案二:通过后端转发,后端请求第三方资源,返回给前端,前端使用file-saver等工具保存文件。如果url指向的第三方资源配置了CORS,则download属性无效,但可以在本地获取并下载文件,且不能修改文件名。二、解决方案1、使用HTML5Blob下载文本信息文件constdownloadRes=async(url,name)=>{letresponse=awaitfetch(url)//内容转化为blob地址letblob=awaitresponse.blob()//创建一个隐藏的可下载链接letobjectUrl=window.URL.createObjectURL(blob)leta=document.createElement('a')//地址a.href=objectUrl//修改文件名a.download=name//触发点击document.body.appendChild(a)a.click()//移除setTimeout(()=>document.body.removeChild(a),1000)}2.图片格式如果我们要下载一张图片,我们可以将此图片转换为base64格式并下载。```exportconstdownloadImg=async(url,name)=>{varcanvas=document.createElement('canvas'),ctx=canvas.getContext('2d'),img=newImage();img.crossOrigin='匿名';img.onload=function(){canvas.height=img.height;canvas.width=img.width;ctx.drawImage(img,0,0);vardataURL=canvas.toDataURL('image/png');让a=document.createElement('a');a.href=dataURL;a.下载=名称;文档.body.appendChild(a);a.点击();setTimeout(()=>{document.body.removeChild(a);canvas=null;},1000);};img.src=url;};```