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-TypeContent-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
		};
相关推荐
前进的李工15 分钟前
LangChain使用之Model IO(提示词模版之ChatPromptTemplate)
java·前端·人工智能·python·langchain·大模型
漫随流水30 分钟前
旅游推荐系统(login.html)
前端·html·旅游
1024小神32 分钟前
记录xcode项目swiftui配置APP加载启动图
前端·ios·swiftui·swift
CHU72903538 分钟前
社区生鲜买菜小程序前端功能版块设计及玩法介绍
前端·小程序
2501_915918411 小时前
iOS mobileprovision 描述文件管理,新建、下载和内容查看
android·ios·小程序·https·uni-app·iphone·webview
尤山海1 小时前
深度防御:内容类网站如何有效抵御 SQL 注入与脚本攻击(XSS)
前端·sql·安全·web安全·性能优化·状态模式·xss
前端小趴菜051 小时前
Windi CSS
前端·css
00后程序员张1 小时前
iOS 应用程序使用历史记录和耗能记录怎么查?
android·ios·小程序·https·uni-app·iphone·webview
榴莲omega1 小时前
第7天:网络进阶——TCP/UDP、WebSocket、长连接
javascript·网络·tcp/ip·udp·八股
xuankuxiaoyao1 小时前
VUE.JS 实践 第二章
前端·javascript·vue.js