vue下载图片a标签只能跳转打开无法下载问题

情景1:如果存在CORS问题,先将图片转成base64 :(亲测有效)
downloadIamge(imgsrc, name) {//下载图片地址和自定义图片名称
let image = new Image();
// 解决跨域 Canvas 污染问题
image.setAttribute("crossOrigin", "anonymous");
image.onload = function() {
 let canvas = document.createElement("canvas");
 canvas.width = image.width;
 canvas.height = image.height;
 let context = canvas.getContext("2d");
 context.drawImage(image, 0, 0, image.width, image.height);
 let url = canvas.toDataURL("image/png"); //得到图片的base64编码数据
 let a = document.createElement("a"); // 生成一个a元素
 let event = new MouseEvent("click"); // 创建一个单击事件
 a.download = name || "qrcode.jpg"; // 设置图片名称
 a.href = url; // 将生成的URL设置为a.href属性
 a.dispatchEvent(event); // 触发a的单击事件
};
image.src = imgsrc;
}


情景2:如果不存在CORS问题,可以借助Blob实现下载(构造xhr请求文件地址, 以Blob的形式接收Response):
function downloadWithBlob(url,name) {
 fetch(url).then(res => res.blob().then(blob => {
  var a = document.createElement('a');
  var url = window.URL.createObjectURL(blob);
  var filename = name || 'qrcode.jpg';
  a.href = url;
  a.download = filename;
  a.click();
  window.URL.revokeObjectURL(url);
 }));
}


情景3:如果有文件content:
function funDownload(content, filename) {
    var eleLink = document.createElement('a');
    eleLink.download = filename;
    eleLink.style.display = 'none';
    // 字符内容转变成blob地址
    var blob = new Blob([content]);
    eleLink.href = URL.createObjectURL(blob);
    // 触发点击
    document.body.appendChild(eleLink);
    eleLink.click();
    document.body.removeChild(eleLink);
};

vue项目根据后台返回的url下载图片处理a标签无法下载问题 - _JZYU - 博客园原因:<a>标签通过download 属性下载文件只适用于同源的文件 <a download="自定义图片名" href="url">下https://www.cnblogs.com/jzyu/p/13743322.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值