a标签加download属性,可直接下载图片的两种方式(而不是预览)

写项目碰到过两次需求是要点击直接下载图片的,一个是vue项目,一个是在react的项目,两种方法,仅此记录以便查看。

众所周知,a标签加download属性可以实现大部分文件的点击直接下载(如zip),但是部分文件(如jpg,pdf等浏览器可以直接识别的文件)会直接打开,而不是下载。

以下提供两种实践过并且有效的方法,仅供参考。

一、加文件名后缀 ?response-content-type=application/octet-stream

<a :href=`${result.imageUrl}?response-content-type=application/octet-stream` download target="_blank" >
	<img :src="result.imageUrl"/>
</a>

加文件名后缀的在vue项目就实现了点击图片直接下载的效果,但是后面在react项目中,遇到同样的问题,再用又没有了效果,于是找到了第二种方法。

二、将图片转化为blob格式

先写一个downloadFile的函数

export const downloadFile = (url, downloadName = '') => {
  // console.log(url);
  const link = document.createElement('a');
  fetch(url).then(res => res.blob()).then((blob) => {
    link.href = URL.createObjectURL(blob);
    // console.log(link.href)
    link.download = downloadName;
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
  });
};

使用:

<Button
	type="secondary"
	onClick={() => {
		downloadFile(image_url, 'product image');
     }}
>Download</Button>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值