• uniapp实现图片上传——支持APP、微信小程序


    uniapp实现图片、视频上传

    相关文档:


    效果图

    在这里插入图片描述


    组件

    • 简单封装,还有很多属性…,自定义样式等…根据个人所需调整
    template
    <template>
    	<view>
    		<u-upload
    			:fileList="fileList"
    			@afterRead="afterRead"
    			@delete="deletePic"
    			name="files"
    			:maxCount="maxCount"
    			:multiple="multiple"
    			:width="width"
    			:height="height"
    			:previewFullImage="previewFullImage"
    			:accept="accept"
    		>
    		u-upload>
    	view>
    template>
    

    js
    • toast 方法,修改为自己即可;
    <script>
    	export default {
    		name:"uploadFile",
    		props: {
    			width: {
    				type: Number,
    				default: 60
    			},
    			height: {
    				type: Number,
    				default: 60
    			},
    			maxCount: { // 限制上传数量
    				type: Number,
    				default: 1
    			},
    			multiple: { // 是否开启图片多选
    				type: Boolean,
    				default: false
    			},
    			list: { // 图片列表
    				type: Array,
    				default: []
    			},
    			previewFullImage: { // 文件预览
    				type: Boolean,
    				default: true
    			},
    			accept: { // 上传类型 all | media | image | file | video
    				type: String,
    				default: image
    			}
    		},
    		data() {
    			return {
    				fileList: []
    			};
    		},
    		mounted() {
    			this.fileList = this.list;
    		},
    		methods: {
    			/**
    			 * 删除图片
    			 * @param {Object} event
    			 */
    			deletePic(event) {
    				this.fileList.splice(event.index, 1)
    			},
    			/**
    			 * 读取后的处理函数
    			 * @param {Object} event
    			 */
    			async afterRead(event) {
    				let lists = [].concat(event.file)
    				let fileListLen =this.fileList.length
    				lists.map((item) => {
    					this.fileList.push({
    						...item,
    						status: 'uploading',
    						message: '上传中...'
    					})
    				})
    				for (let i = 0; i < lists.length; i++) {
    					const result = await this.uploadFilePromise(lists[i].url)
    					this.$util.showToast('上传成功');
    					
    					let item = this.fileList[fileListLen]
    					this.fileList.splice(fileListLen, 1, Object.assign(item, {
    						status: 'success',
    						message: '',
    						url: result.imgUrl
    					}))
    					fileListLen++
    				}
    			},
    			/**
    			 * 上传图片
    			 * @param {Object} url
    			 */
    			uploadFilePromise(url) {
    				return new Promise((resolve, reject) => {
    					uni.uploadFile({
    						url: `服务器 url xxxx`,
    						filePath: url,
    						name: 'file', // 文件对应的 key
    						header: {
    							// 根据个人所需,是否要登录
    							// Authorization: `Bearer ${ getToken() }`
    						},
    						success: (res) => {
    							// 接口返回数据,自行修改
    							let datas = JSON.parse(res.data);
    							if (datas.code != 200) {
    								this.$util.showToast(datas.msg);
    								reject(res);
    								return;
    							}
    							setTimeout(() => {
    								resolve(datas.data)
    							}, 1000)
    						},
    						fail: (res) => {
    							reject(res);
    						}
    					});
    				})
    			}
    		}
    	}
    </script>
    
    <style>
    
    </style>
    

    使用

    <view>
    	<uploadFile :list="imgList">uploadFile>
    view>
    

    import uploadFile from '@/components/uploadFile/uploadFile.vue'
    
    export default {
    		components: {
    			uploadFile
    		},
    		data() {
    			return {
    				imgList: [{ url: 'https://cdn.uviewui.com/uview/swiper/1.jpg' }] // test 根据业务处理
    			}
    		}
    	}
    }
    
  • 相关阅读:
    SpringBoot+Vue实现前后端分离的员工日志管理信息系统
    redis的持久化机制原理
    RHCE---搭建博客网站
    JS柯里化
    C语言每日一题(18)数组匹配
    ShaderLab实现序列帧动画
    【uniapp】安装与使用uView组件库:
    榜单首发——线控制动「新周期」,本土供应商市场竞争力TOP10
    STM32 | 零基础 STM32 第一天
    PMP 11.27 考试倒计时37天!来提分啦!
  • 原文地址:https://blog.csdn.net/Smile_ping/article/details/139326329