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()
			},
相关推荐
豐儀麟阁贵6 分钟前
8.5在方法中抛出异常
java·开发语言·前端·算法
zengyuhan50336 分钟前
Windows BLE 开发指南(Rust windows-rs)
前端·rust
醉方休39 分钟前
Webpack loader 的执行机制
前端·webpack·rust
前端老宋Running1 小时前
一次从“卡顿地狱”到“丝般顺滑”的 React 搜索优化实战
前端·react.js·掘金日报
隔壁的大叔1 小时前
如何自己构建一个Markdown增量渲染器
前端·javascript
用户4445543654261 小时前
Android的自定义View
前端
WILLF1 小时前
HTML iframe 标签
前端·javascript
Tiger Shi1 小时前
使用LIBOBS: 采集桌面,保存图片
ffmpeg·音视频·obs
枫,为落叶1 小时前
Axios使用教程(一)
前端
小章鱼学前端1 小时前
2025 年最新 Fabric.js 实战:一个完整可上线的图片选区标注组件(含全部源码).
前端·vue.js