jq 之 download下载图片或文件功能,以及一个神奇的download属性!

在一个项目中很常见的一个效果就是 下载图片、文件功能,下边就介绍两种方法

1.用jq写下载的方法

//html中代码如下
<div>
	<p>点击图片可下载</p>
    <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1543890538&di=b54e3bf81971467f57fd5bb39f493f65&imgtype=jpg&er=1&src=http%3A%2F%2Fwww.qqoi.cn%2Fimg_star%2F181240813.jpeg" alt="" id="download" style="width:260px;height:350px;">
</div>
//JQ代码如下:
$('#download').click(function(){
    var url = $(this).attr('src')
    window.open(url)
})

用这种方法的时候会有一个问题,就是如果你下载的是一个图片类型的文件,如jpg,png等等,不同的浏览器会有不同的处理方式,谷歌浏览器就会新开一个窗口展示此图片,如想接着下载,自行点右键保存文件~,

还有的小伙伴 会用到 window.location(url), 这种方式遇到的问题就是不会新打开窗口,直接在原窗口展示图片。所以更偏离下载图片的一个功能,不太符合我们原本想要的效果;

再此 ,再点明一点: 在使用vue框架编程序的时候用到下载方法,有的会提示
window.open() 方法找不到或者未定义。原因是 open方法已经被占用。可能你又会说,我并没用到过open方法呀~。但是冥冥中再某个角落 open方法确实已经被占用了! 所以解决办法就是:

<div>
	<p @click="download(https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1543295819912&di=d20e2ca20b50b6dbd58ffae574891dc8&imgtype=0&src=http%3A%2F%2Fc2.haibao.cn%2Fimg%2F0_0_100_1%2F1531134422.2724%2F41280bcc8cd59bbf813af0e29fb06bb2.jpg)">下载</p>
</div>
//JQ代码如下:
methods:{
	download(url){
		var open = " "  //先声明open 为 “”,,这样window.open()方法就能找到并下载。
		window.open(url)
	}
}

另外:.pdf 、 .doc 等类型的文件(即除了图片类型的文件),可直接实现下载效果,不存在新窗口直接打开的文件;

方法2.这里介绍一个好用的download属性来实现下载功能

在a 标签中添加download属性,即:<a href="url" download></a>
注意:download 属性必须在a标签中才可以使用。其他标签中使用无效;
优点就是:
比如 .jpg .png这样的相对路径的图片文件,浏览器直接就可以下载,并不是先在新窗口打开图片了,这样也就解决了方法1中存在的问题。
一个浏览器兼容问题:
参考链接:https://blog.youkuaiyun.com/p312011150/article/details/78928244

但是:只有相对路径的图片是可以直接下载的!网络路径的图片仍然是先打开 后自行下载!
网络图片的结果就是在chrome浏览器 frefox,ie浏览器里面直接打开而不是下载,360浏览器,QQ浏览器执行下载。
这个属性存在兼容性问题。

所以,总之!图片或者文件弄成一个压缩包的话 ,href的地址就算是一个网络地址,但是直接打不开就会执行下载。这也是一个办法。只要是浏览器直接解析不出来的东西都是可以执行下载动作的。

因为通常如果a标签的href属性=‘xxx’,如果xxx可以被浏览器解析,那么xxx就会被页面打开,而不是被下载,只有当浏览器不能解析的时候,那么才会被下载到本地。通常 js, 图片,html等文档均可被解析,MP4,mp3,zip等文件不会被解析。

此处参考:https://blog.youkuaiyun.com/xiaoqiangbigbrother/article/details/8121836

再来一点:Download 属性可以设置一个值
Html5里面的 a标签的 Download 属性可以设置一个值来规定下载文件的名称。所允许的值没有限制,浏览器将自动检测正确的文件扩展名并添加到文件 (.img, .pdf, .txt, .html, 等等),

<a href="https://vuejs.org/images/logo.png" download="vueLogo.png">下载 vue 的 LOGO</a>

通过给 download 添加属性名,就可以直接下载并且重命名为这个文件名了。

在Spring Boot应用中,结合jQueryjq),实现多文件下载通常涉及到服务器端生成文件流和客户端处理下载。以下是一个简单的步骤概述: 1. **服务端准备**: - 定义一个Spring Boot API,该API接收请求参数(如文件ID列表),从数据库其他存储位置检索对应的文件内容。 ```java @GetMapping("/download") public ResponseEntity<HttpEntity<?>> downloadFiles(@RequestParam("files") List<String> fileIds) throws IOException { // 从数据库文件系统中获取文件流 Stream[] streams = ...; HttpHeaders headers = new HttpHeaders(); for (int i = 0; i < files.size(); i++) { headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + streams[i].getName()); } return ResponseEntity.ok() .headers(headers) .body(streams); } ``` 2. **jQuery前端请求**: - 利用jQuery的`$.ajax``.getScript`方法发起一个GET请求到上述API,并传递文件ID列表作为参数。 ```javascript function downloadFiles(fileIds) { $.ajax({ url: "/download", type: 'GET', data: { files: fileIds }, processData: false, // prevent jQuery from processing the data contentType: false, // set content type manually success: function(data) { let filesToDownload = Array.from(data); filesToDownload.forEach((file, index) => { let element = $("<a>") .attr("href", window.URL.createObjectURL(file)) .attr("download", filesToDownload[index].name) .click(); }); } }); } ``` 3. **浏览器下载**: - JavaScript会创建一个隐藏的`<a>`标签,设置其`href`属性为服务器生成的Blob URL,并模拟点击事件触发浏览器的下载功能。 请注意,实际项目中可能还需要处理错误、权限等问题。此外,如果文件很大,最好分块下载,避免一次性加载大量数据导致内存溢出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值