uniapp 微信小程序,图片,视频,文件预览弹窗,可保存

javascript 复制代码
			<view class="attachmentPopup">
				<view style="width: 100%;height:  100%;" v-if="Article.file_type==1">
					<image style="width: 100%;height: 90%;" :show-menu-by-longpress="true" :src="Article.file"
						mode="aspectFit" @click="previewImage({url:Article.file})"></image>
					<view class="attachmentTips">
						长按保存图片
					</view>
				</view>
				<view style="width: 100%;height: 100%;" v-if="Article.file_type==2">
					<video style="width: 100%;height: 90%;" :muted="true" :src="Article.file"
						v-if="Article.file"></video>
					<view class="attachmentTips" @click="onStartDownload">
						点击保存视频
					</view>
				</view>
				<view style="width: 100%;height: 100%;" v-if="Article.file_type==3">
					<view class="attachmentBorder flex jc ac" style="width: 100%;height: 90%;">
						<view class="">
							<image class="attachmentBorderimg" src="/static/file.png" mode="aspectFit"
								@click="viewfile">
							</image>
							<view class="attachmentTips">
								点击预览文件
							</view>
						</view>
					</view>
					<view class="attachmentTips">
						保存文件请点击预览文件页面右上角的三个小点
					</view>
				</view>
			</view>
css 复制代码
	.attachmentPopup {
		width: 690rpx;
		height: 60vh;
		padding: 70rpx 30rpx 30rpx 30rpx;
		box-sizing: border-box;

		.attachmentTips {
			width: 100%;
			font-size: 26rpx;
			color: #999;
			text-align: center;
			margin-top: 20rpx;
		}

		.attachmentBorder {
			border-radius: 18rpx;
			border: 1rpx solid #999;

			.attachmentBorderimg {
				width: 300rpx;
				height: 300rpx;
				margin: auto;
			}
		}

	}

js

javascript 复制代码
		
	// 预览图片   使用可多张可单张 多张就传数组arr,和当前的index,如果网络地址也要传一下 
	// {
	// 	url: this.user.aboutphoto
	// }

	// this.$publicfun.previewImage({
	// 	arr: arr,
	// 	i: index
	// })
	//单张直接传地址就行
	previewImage({
		arr = [],
		http = "",
		i = 0,
		url = ''
	}) {
		// console.log(i);
		// console.log(url);
		// console.log(arr);
		//准备一个装图片路径的  数组imgs
		if (arr.length == 0) {
			uni.previewImage({
				urls: [url],
				current: i
			})
			return;
		}

		let imgs = arr.map(item => {
			//只返回图片路径
			return http + item
		})
		uni.previewImage({
			urls: imgs,
			current: i
		})
	},






//获取权限
			onStartDownload() {
				wx.getSetting({
					success: (res) => {
						if (res.authSetting['scope.writePhotosAlbum'] === undefined) {
							wx.authorize({
								scope: 'scope.writePhotosAlbum',
								success: () => {
									this.saveVideo()
									return
								},
								fail: (err) => {
									console.log('授权失败:', err)
								}
							})
						} else if (!res.authSetting['scope.writePhotosAlbum']) {
							wx.openSetting({
								success: (res) => {
									if (res.authSetting['scope.writePhotosAlbum']) {
										this.saveVideo()
										return
									}
								}
							})
						} else {
							this.saveVideo()
							return
						}
					}
				})
			},
			//保存视频
			saveVideo() {
				console.log('操作了');

				// uni.showLoading()
				uni.downloadFile({
					url: this.Article.file,
					timeout: 30000,
					header: {
						"Content-Type": "video/mp4"
					},
					success: res => {
						console.log(this.Article.file);
						uni.saveVideoToPhotosAlbum({
							filePath: res.tempFilePath,
							success: res => {
								console.log('进入保存');
								uni.hideLoading()
								uni.showToast({
									title: "保存成功",
									duration: 2000,
								})
							}
						})
					},
					fail() {
						uni.showToast({
							title: "保存失败",
							duration: 2000,
						})
						uni.hideLoading()
					}
				})
				uni.hideLoading()

			},


			//预览文件
			viewfile() {
				uni.downloadFile({
					url: this.Article.file,
					timeout: 30000,
					header: {
						"Content-Type": "video/mp4"
					},
					success: res => {
						uni.openDocument({
							filePath: res.tempFilePath,
							showMenu: true,
							success: function(openRes) {
								console.log('打开文档成功', openRes);
							},
						})
					},
					fail() {
						uni.showToast({
							title: "保存失败",
							duration: 2000,
						})
						uni.hideLoading()
					}
				})

				// wx.getFileSystemManager()
			},
相关推荐
小兵张健2 小时前
价值1000的 AI 工作流:Codex 通用前端协作模式
前端·aigc·ai编程
sunny_2 小时前
面试踩大坑!同一段 Node.js 代码,CJS 和 ESM 的执行顺序居然是反的?!99% 的人都答错了
前端·面试·node.js
拉不动的猪2 小时前
移动端调试工具VConsole初始化时的加载阻塞问题
前端·javascript·微信小程序
ayqy贾杰4 小时前
Agent First Engineering
前端·vue.js·面试
IT_陈寒4 小时前
SpringBoot实战:5个让你的API性能翻倍的隐藏技巧
前端·人工智能·后端
iceiceiceice5 小时前
iOS PDF阅读器段评实现:如何从 PDFSelection 精准还原一个自然段
前端·人工智能·ios
大金乄5 小时前
封装一个vue2的elementUI 表格组件(包含表格编辑以及多级表头)
前端·javascript
葡萄城技术团队6 小时前
【性能优化篇】面对万行数据也不卡顿?揭秘协同服务器的“片段机制 (Fragments)”
前端
程序员阿峰6 小时前
2026前端必备:TensorFlow.js,浏览器里的AI引擎,不写Python也能玩转智能
前端
Jans6 小时前
Shipfe — Rust 写的前端静态部署工具:一条命令上线 + 零停机 + 可回滚 + 自动清理
前端