结合el-upload修改支持上传图片、视频并预览

结合element plus的el-upload标签,实现上传图片和视频,并支持在线预览和放大
1、html部分

<el-form-item label="活动照片、视频">
	<el-upload
		v-model:file-list="state.photoList"
		:action="state.uploadUrl"
		accept=".jpg,.png,.jpeg,.mp4,.mov,.avi"
		list-type="picture-card"
		:limit="10"
		:on-success="handleUpload"
		:class="state.photoList.length === 10 ? 'hideUpload' : ''">
		<el-icon><Plus /></el-icon>
		<template #file="{ file }">
			<div>
				<img
					v-if="file.name.indexOf('.jpg') > -1
						|| file.name.indexOf('.png') > -1
						|| file.name.indexOf('.jpeg') > -1"
					:src="file.url"
					alt=""
					class="el-upload-list__item-thumbnail" />
				<video
					v-else-if="file.name.indexOf('.mp4') > -1
						|| file.name.indexOf('.mov') > -1
						|| file.name.indexOf('.avi') > -1"
					class="el-upload-list__item-thumbnail"
					style="width: 100%;height: 100%;"
					autoplay
					:src="file.url">
					<source :src="file.url" type="video/mp4" />
					<source :src="file.url" type="video/mov" />
					<source :src="file.url" type="video/avi" />
				</video>
				<span class="el-upload-list__item-actions">
					<span class="el-upload-list__item-preview" @click="handlePreview(file)">
						<el-icon><zoom-in /></el-icon>
					</span>
					<span
						v-if="!state.disabledBtn"
						class="el-upload-list__item-delete"
						@click="handleRemove(file)">
						<el-icon><Delete /></el-icon>
					</span>
				</span>
			</div>
		</template>
	</el-upload>
	<el-dialog v-model="state.dialogVisible">
		<img
			w-full
			:src="state.dialogImageFile.url"
			alt=""
			v-if="state.dialogImageFile.name.indexOf('.jpg') > -1
				|| state.dialogImageFile.name.indexOf('.png') > -1
				|| state.dialogImageFile.name.indexOf('.jpeg') > -1" />
		<video
			v-else-if="state.dialogImageFile.name.indexOf('.mp4') > -1
				|| state.dialogImageFile.name.indexOf('.mov') > -1
				|| state.dialogImageFile.name.indexOf('.avi') > -1"
			w-full
			style="width: 100%;height: 100%;"
			controls
			autoplay
			:src="state.dialogImageFile.url">
			<source :src="state.dialogImageFile.url" type="video/mp4" />
			<source :src="state.dialogImageFile.url" type="video/mov" />
			<source :src="state.dialogImageFile.url" type="video/avi" />
		</video>
	</el-dialog>
</el-form-item>

2、js部分

const state = reactive({
   
	photoList: [] as any,           // 上传图片
	dialogVisible: false as boolean,
	dialogImageFile: '' as any,
	disabledBtn: false as boolean,
});

// 预览图片和视频
const handlePreview = (file: any) => {
   
	state.dialogImageFile = file;
	state.dialogVisible = true;
}
// 删除图片视频
const handleRemove = (file: any) => {
   
	state.photoList.map((item: any, index: number) => {
   
		if(item.response && item.response.data) {
   
			if(item.response.data == file.response?.data || item.response.data == file.url) {
   
				state.photoList.splice(index, 1);
			}
		} else if(item.url) {
   
			if(item.url == file.response?.data || item.url == file.url) {
   
				state.photoList.splice(index, 1);
			}
		}
	})
}
// 上传图片
const handleUpload = (res: any) => {
   
	if(res.code != 0) {
   
		state.photoList.pop()
		ElMessage.error(res.msg)
	}
}

3、css部分

<style lang="scss" scoped>
    :deep(.hideUpload .el-upload--picture-card)  {
   
        display: none;
    }
    :deep(.el-upload--picture-card) {
   
        width: 243px;
        height: 180px;
    }
    :deep(.el-upload-list--picture-card .el-upload-list__item) {
   
        width: 243px;
        height: 180px;
    }
</style>

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-27 14:02:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-27 14:02:03       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-27 14:02:03       87 阅读
  4. Python语言-面向对象

    2023-12-27 14:02:03       96 阅读

热门阅读

  1. Node.js中处理特殊字符的文件名,安全稳妥的方案

    2023-12-27 14:02:03       61 阅读
  2. 腾讯云国外服务器价格表免费公网IP地址

    2023-12-27 14:02:03       70 阅读
  3. MySQL5.7服务器状态变量参考

    2023-12-27 14:02:03       61 阅读
  4. ASP.NET Core认证原理和实现

    2023-12-27 14:02:03       53 阅读
  5. LLaMA-2 下载&demo使用

    2023-12-27 14:02:03       54 阅读
  6. 【数字IC设计】Verilog计算x/255的商和余数

    2023-12-27 14:02:03       66 阅读
  7. 微信小程序实现一个电影信息查询的应用程序

    2023-12-27 14:02:03       56 阅读