微信小程序实现下载 上传表格(xls、xlsx)

项目使用uniapp写的 专门给微信小程序做个上传 下载表格,下载方通过临时保存文件然后分享这个文件路径,达到下载功能。

远程请求路径

复制代码
const baseUrl = '' //替换成请求地址

上传方法uploading()

复制代码
const uploading = (() => {
		// 小程序
		const data = {
			后端需要的参数
			file: ''//上传路径
		};

		// 支持的表格扩展名
		const acceptedExtensions = ['xlsx', 'xls', 'csv'];

		uni.chooseMessageFile({
			count: 1,
			type: 'file', // 必须为 'file'
			extension: acceptedExtensions, // ✅ 关键:限制文件扩展名
			success: (res) => {
				const file = res.tempFiles[0];
				if (!file) {
					uni.showToast({
						title: '未选择文件',
						icon: 'none'
					});
					return;
				}

				// 额外校验(防止 extension 失效)
				const fileName = file.name || '';
				const ext = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase();
				if (!acceptedExtensions.includes(ext)) {
					uni.showToast({
						title: '仅支持 Excel 或 CSV 文件',
						icon: 'none',
						duration: 1000,
					});

					return;
				}

				// 开始上传
				uni.showLoading({
					title: '上传中...',
					mask: true
				});

				const uploadTask = uni.uploadFile({

					url: baseUrl + 'outsideProvince/importOutsideList', //接口
					filePath: file.path, // ✅ 临时文件路径
					dataType: 'json',
					name: 'file', // 后端接收字段名
					formData: {
						shareId: data.shareId,
						phone: data.phone,
						name: data.name,
						file
					},
					success: (uploadRes) => {
						uni.hideLoading();
						let resData;
						resData = JSON.parse(uploadRes.data);
						console.log(resData.code == 200, '0000', resData)
						if (resData.code == 200) {

							if (resData.warn) {
								uni.showModal({
									icon: 'exception',
									content: resData.warn, // 支持长文本、换行
									showCancel: false,

								})
							} else {
								uni.showToast({
									title: '上传完成',
									icon: 'success',
									duration: 2000,
								});
							}
							var datas = {
								shareId: person.shareId,
								search: person.searchVal,
								phone: person.phone,


							};
							selectOutsideList(datas).then((res) => {

								if (res.code == 200) {
									person.productList = res.data

								}
							})
						} else {
							uni.showToast({
								title: resData.msg || '上传失败',
								icon: 'none',
								duration: 1000,
							});
						}

					},
					fail: (err) => {
						uni.hideLoading();
						console.error('上传失败:', err);
						uni.showToast({
							title: '上传失败,请重试',
							icon: 'none',
							duration: 1000,
						});
					}
				});

				// 安全监听进度
				if (uploadTask && typeof uploadTask.onProgressUpdate === 'function') {
					uploadTask.onProgressUpdate((progressRes) => {
						console.log('上传进度:', progressRes.progress + '%');
						
						// 可选:更新页面进度 this.progress = progressRes.progress;
					});
				}
			},
			fail: (err) => {
				console.error('选择文件失败:', err);
				uni.showToast({
					title: '取消选择或选择失败',
					icon: 'none'
				});
			}
		});

下载方法download(),通过临时保存文件然后分享这个文件路径,达到下载功能。

复制代码
const download = () => {
		// const shareId = '1447090'; //后端需要的参数
		// const phone = '123';//后端需要的参数
		
		// 	// 替换为你的实际接口地址
		const baseUrls = baseUrl + 'outsideProvince/exportOutsideList';
		const url = `${baseUrls}?shareId=${encodeURIComponent(shareId)}&phone=${encodeURIComponent(phone)}`;

		uni.showLoading({
			title: '生成文件...'
		});

		uni.downloadFile({
			url,
			success: (res) => {
				uni.hideLoading();
				if (res.statusCode !== 200) {
					uni.showToast({
						title: `下载失败(${res.statusCode})`,
						icon: 'none'
					});
					return;
				}

				// 仅在微信小程序中使用 wx.shareFileMessage
				// #ifdef MP-WEIXIN
				if (typeof wx !== 'undefined' && wx.shareFileMessage) {
					wx.shareFileMessage({
						filePath: res.tempFilePath,
						fileName: '报价.xlsx',
						success: () => {
							uni.showToast({
								title: '分享成功',
								icon: 'success'
							});
						},
						fail: (err) => {
							console.error('分享失败:', err);
							uni.showToast({
								title: '分享失败',
								icon: 'none'
							});
						}
					});
				} else {
					uni.showToast({
						title: '当前环境不支持文件分享',
						icon: 'none'
					});
				}
				// #endif

				// #ifndef MP-WEIXIN
				// 其他平台可考虑保存到本地或提示用户
				uni.showToast({
					title: '仅微信小程序支持分享文件',
					icon: 'none'
				});
				// 或调用 uni.saveFile + uni.openDocument 等方式预览
				// #endif
			},
			fail: (err) => {
				uni.hideLoading();
				console.error('下载失败:', err);
				uni.showToast({
					title: '网络错误',
					icon: 'none'
				});
			}
		});
	};
相关推荐
蓝帆傲亦11 小时前
支付宝小程序性能暴增秘籍:UniApp项目极限优化全攻略
小程序·uni-app
CHU72903516 小时前
淘宝扭蛋机抽盒小程序前端功能解析:解锁趣味抽盒新体验
前端·小程序
2501_9339072118 小时前
深圳本凡科技专业企业APP开发,助力手机应用创新优化
科技·微信小程序·小程序
每天都要加油呀!19 小时前
TypeError: uni.requestPayment is not a function
小程序
java1234_小锋20 小时前
分享一套优质的微信小程序校园志愿者系统(SpringBoot后端+Vue3管理端)
微信小程序·小程序·校园志愿者
2501_9160088921 小时前
深入解析iOS机审4.3原理与混淆实战方法
android·java·开发语言·ios·小程序·uni-app·iphone
打破砂锅问到底00721 小时前
AI 驱动开发实战:10分钟从零构建「微信群相册」小程序
人工智能·微信·小程序·ai编程
CHU7290351 天前
扭蛋机盲盒小程序前端功能设计解析:打造趣味与惊喜并存的消费体验
前端·小程序
QT.qtqtqtqtqt1 天前
uni-app小程序前端开发笔记(更新中)
前端·笔记·小程序·uni-app
CHU7290351 天前
直播商城APP前端功能全景解析:打造沉浸式互动购物新体验
java·前端·小程序