uniapp h5端使浏览器弹出下载框

如果只是zip文件,用方案一即可,创建节点标签<a>,执行点击行为即可触发下载框。

方案一

js 复制代码
	const imgUrl = "zip文件地址";
	
	//创建节点标签<a>,执行点击行为,拉原图
	const link = document.createElement('a');
	link.style.display = 'none';
	link.href = imgUrl;
	link.download = fileName;   // 这里不再受跨域限制
	document.body.appendChild(link);
	link.click(); //触发下载
	document.body.removeChild(link);
	// 释放内存
	setTimeout(() => URL.revokeObjectURL(imgUrl), 1000);

如果是图片资源,点击a标签可能会弹出图片预览窗口,解决思路是后端代理下载图片资源后,再在响应体修改Content-Type和Content-Disposition属性值,使浏览器识别为下载资源。

方案二

js 复制代码
async download() {
	// #ifdef H5
	const imgUrl = "图片文件地址";
	//获取文件名
	const fileName = imgUrl.split('/').pop().split('?')[0]; // 可选
	
	const proxyUrl = "URL化云对象方法地址"+`?url=${encodeURIComponent(imgUrl)}&filename=${encodeURIComponent(fileName)}`
				
	//创建节点标签<a>,执行点击行为,拉原图
	const link = document.createElement('a');
	link.style.display = 'none';
	link.href = proxyUrl;
	link.download = fileName;   // 这里不再受跨域限制
	document.body.appendChild(link);
	link.click(); //触发下载
	document.body.removeChild(link);
	// 释放内存
	setTimeout(() => URL.revokeObjectURL(proxyUrl), 1000);
	// #endif
}

云对象URL方法:

js 复制代码
	async download(params) {
		const { url: remoteUrl, filename = 'download.jpg' } = params;
		if (!remoteUrl) throw new Error('missing url');

		const safeName = filename.replace(/[^a-zA-Z0-9._-]/g, '_'); //转为符合格式的文件名

		// 1. 把远程文件拉回来,默认返回 Buffer
		const res = await uniCloud.httpclient.request(remoteUrl, {
		  method: 'GET',
		  timeout: 10000
		});
		//console.log('返回类型:', Object.prototype.toString.call(res.data));
		//console.log('字节长度:', res.data.length);
		
		// 2. 组装响应头,强制下载
		const headers = {
		  'Content-Type': 'application/octet-stream',
		  'Content-Disposition': `attachment; filename="${safeName}"`
		};
		
		// 3. 返回给前端
		return {
		  mpserverlessComposedResponse: true, //自定义响应必带参数
		  statusCode: 200,
		  headers,
		  body:res.data,
		  isBase64Encoded: true
		};
相关推荐
@PHARAOH18 分钟前
WHAT - Vite 8(Rolldown 底层构建引擎升级)
前端·架构
阿Q的AI笔记22 分钟前
从ReAct到GRPO、从OpenHands到SWE-agent:Agent完整知识体系全拆解
前端·react.js·前端框架
计算机魔术师27 分钟前
从六个月路线图到JIT规划:代码评审不只是审代码
前端
迅猛龙办公室33 分钟前
Python实现PM空气质量提醒
服务器·前端·python
ydjs678899-bot1 小时前
您的Next.js中间件匹配器配置可能会跳过您认为它保护的路由
开发语言·javascript·中间件
Chengbei111 小时前
JsOwl|AI 赋能 JS 敏感信息扫描器,AST + 正则、source‑map 源码还原、登录态爬虫输出交互式 HTML 报告
开发语言·javascript·网络·人工智能·爬虫·网络安全·自动化
鬼手点金2 小时前
模型即 Agent:当模型本身成为产品
开发语言·前端·人工智能·python·机器学习
kiracrimson2 小时前
npm 入门:包管理器、依赖与 npx
前端·npm·node.js
ShineWinsu2 小时前
对于JavaScript:初识JavaScript以及输入输出
java·开发语言·前端·javascript·css·面试·html