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()
			},
相关推荐
VidDown2 分钟前
上线三个月后的第一次事故:一个 Django 服务的日志、监控与故障复盘
数据库·python·django·wpf·音视频·视频编解码
java1234_小锋4 分钟前
【技术专题】HTML5 网页技术 - HTML5 列表标签
前端·html·html5
强二小哥帅6 分钟前
Kotlin 协程复习笔记
前端
不可能片场9 分钟前
工程实践 原子替换改了 ctime 怎么修
前端·electron
donk13149 分钟前
React Native for OpenHarmony 实战:三方库 react-native-toast-message 的鸿蒙化适配指南
react native·react.js·音视频·harmonyos
暧暧内含光10 分钟前
HTTP 文件传输体系全解:从协议标头、OSS 架构到流媒体分片
前端
静默回滚11 分钟前
浏览器能显示AVIF,却导不出一张AVIF
前端
VidDown12 分钟前
用户说“卡顿“,服务器一切正常:播放质量监测与 QoE 指标
运维·服务器·ffmpeg·音视频·视频
小皮虾16 分钟前
小程序全局状态还能这么简单?只需初始化一次,页面自动同步
前端·javascript·微信小程序
用户8186180280020 分钟前
RESTful API 设计规范与版本演进
前端