解决H5的a标签的download属性下载service上的文件出现跨域问题

1.通过点击下载多媒体文件(图片/视频/文件等)最简单的方式: <a href='url' download="filename.ext">下载文件</a>如果url指向同源资源,是正常的。如果url指向第三方资源,download会失效,表现和不使用download时一致——浏览器能打开的文件,浏览器会直接打开,不能打开的文件,会直接下载。浏览器打开的文件,可以手动下载。 解决方案一:将文件打包为.zip/.rar等浏览器不能打开的文件下载。解决方案二:通过后端转发,后端请求第三方资源,返回给前端,前端使用file-saver等工具保存文件。  如果url指向的第三方资源配置了CORS,download属性无效,但可以获取文件下载到本地,无法修改修改文件名。2.解决方法1. 借助HTML5 Blob实现文本信息文件下载const downloadRes = async (url, name) => { let response = await fetch(url) // 内容转变成blob地址 let blob = await response.blob() // 创建隐藏的可下载链接 let objectUrl = window.URL.createObjectURL(blob) let a = document.createElement('a') //地址 a.href = objectUrl //修改文件名 a.download = name // 触发点击 document.body.appendChild(a) a.click() //移除 setTimeout(() => document.body.removeChild(a), 1000)}2.图片格式如果我们想下载一张图片,可以把这张图片转换成base64格式,然后下载。```export const downloadImg = async (url, name) => { var canvas = document.createElement('canvas'), ctx = canvas.getContext('2d'), img = new Image(); img.crossOrigin = 'Anonymous'; img.onload = function() { canvas.height = img.height; canvas.width = img.width; ctx.drawImage(img, 0, 0); var dataURL = canvas.toDataURL('image/png'); let a = document.createElement('a'); a.href = dataURL; a.download = name; document.body.appendChild(a); a.click(); setTimeout(() => { document.body.removeChild(a); canvas = null; }, 1000); }; img.src = url;};```

July 15, 2019 · 1 min · jiezi

前端bug录移动端下载图片

前天,快下班的时候,一朋友发来一个战绩图。这是要约我上分?(这兄弟一手 C 位吊打亲友)。我果断拒绝三连。结果,小韭菜问我,右边那个图怎么做?那好了,事情从这里开始 分析一下需求这个图好像叫雷达图,那我们先去看 echarts,简直不要太像好吗? 小韭菜没给我反应的机会提出了另一个想法:简单一点简单一点,我又想起了 Vue官网 有这个东西。 小韭菜看都没看就说:不用 VueWhat?我只是让你看看原理啊。那好吧,我看了一眼,就是 svg 实现 SVG 实现雷达图jsrun测试地址,如果 jsrun 挂了,可以去我个人网站上看测试地址。 <svg width="200" height="200" class="demo-svg warp"> <polygon points="100,10.899999999999991 175.32367609057616,75.52585404550416 145.49457852743743,162.61791536462093 71.43363673858582,139.31822592662246 41.795341202736594,81.08815994425322" class="demo-polygon" style="fill: #41B883;"></polygon> </svg>SVG 的 polygon<polygon> 标签用来创建含有不少于三个边的图形。points 属性定义多边形每个角的 x 和 y 坐标 那我们来看上面的图片,正好五个角,那我们就可以动手改改。简单的一匹 100,10.899999999999991175.32367609057616,75.52585404550416145.49457852743743,162.6179153646209371.43363673858582,139.3182259266224641.795341202736594,81.08815994425322实现下载雷达图因为快下班了,小韭菜看了一眼说搞定。然后又提出了一个需求,下载这个图片。我一想简单的一匹啊。我前两天才写了文章的 前端培训-初级阶段-场景实战(2019-06-06)-下载文件&下载进度 小韭菜之前用过 html2canvas 还是啥来着。直接这样搞download 直接下载(svgToDataurl)svgToCanvas 然后下载 canvas 的图片canvas 的 toBlob 结合 URL.createObjectURL 和 downloadcanvas 的 toDataUrl 结合 download为啥我上面写了这么多的方法。因为移动端不好使。不好使的原因就是 DataURL 和 BlobURL 在移动端(微信、QQ、QQ浏览器)无法下载。 SVG 怎么用 img 显示这个还是当时在张鑫旭张大师哪里看到的方法。SVGTODataURL data:image/svg+xml,%3Csvg xmlns='http://w这样我们就可以显示了。 download 直接下载上面我们显示了出来,直接下载吧。nonono,因为上面的 Dataurl 是 svg 格式的,下载也是 SVG 格式的。所以我们需要用 img 读取 svgurl。然后 canvas 读取 img 。然后 canvas 输出想要的图片格式。然后再下载。 ...

June 6, 2019 · 1 min · jiezi