快速实现多图片上传组件,支持单个文件,多个文件上传 步骤条step使用; 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12747

效果图如下:

使用方法

 
使用方法

// 添加多张图片(少于6张) addPhotoClick() { uni.hideLoading(); let myThis = this; if (myThis.photoList.length >= 6) { myThis.photoList = []; } uni.chooseImage({ count: 6, sizeType: ['compressed'], //可以指定是原图还是压缩图,默认二者都有 sourceType: ['album'], //从相册选择 success: function(res) { for (let j = 0; j < res.tempFilePaths.length; j++) { // name:服务端文件接受key  filePath: 需与服务端文件接收字段保持一致 let tmpdict = { 'name': 'image', 'filePath': res.tempFilePaths[j] }; myThis.photoList.push(tmpdict); } console.log('选择图片 =' + JSON.stringify(myThis.photoList)); } }); } // 服务器地址上传地址 仅为示例,非真实的接口地址 let baseUrl = "http://gzcc.com/cc//appSc/up" console.log('图片资源 = ' + JSON.stringify(this.photoList)) console.log('请求参数 = ' + JSON.stringify(this.myParamData)); uni.uploadFile({ url: baseUrl, //仅为示例,非真实的接口地址 files: this.photoList, formData: this.myParamData, success: (uploadFileRes) => { uni.hideLoading(); console.log('上传成功 = ' + uploadFileRes.data); } });

HTML代码部分

 
html

<template> <view class="content" v-if="seen"> <uni-steps style="margin-top: 16px; margin-bottom: 16px;" :options="[{title: '基本信息'}, {title: '房源信息'}, {title: '补充信息'}, {title: '提交成功'}]" :active="2" active-color='#007AFF'></uni-steps> <view class="lineView"></view> <form @submit="formSubmit" @reset="formReset"> <view class="inputView"> <text class="leftTitle">交通指引</text> </view> <textarea class="rightTextarea" name="direct" placeholder=" 请输入交通指引" /> <view class="inputView"> <text class="leftTitle">房屋介绍</text> </view> <textarea class="rightTextarea" name="village" placeholder=" 请输入房屋介绍" /> <view class="inputView"> <text class="leftTitle">添加房源照片(最多可添加6张)</text> </view> <view class="tagView"> <!-- 自定义了一个data-id的属性,可以通过js获取到它的值!  hover-class 指定按下去的样式类--> <image class="addPhotoV" mode="aspectFill" v-for="(item, index) in photoList" :key="index" :src="item.filePath"> </image> <image class="addPhotoV" mode="center" @click="addPhotoClick" src="../../static/repair_camera.png"> </image> </view> <view class="uni-btn-v"> <button class="botBtn" type="primary" form-type="submit">提交</button> <view class="tipText"> 注意事项: 请确保您填写的房屋信息真实无误 </view> </view> </form> </view> </template>

JS代码 (引入组件 填充数据)

 
javascript

<script> import Vue from 'vue'; export default { data() { return { photoList: [], seen: true, myParamData: {}, isClick: false, }; }, onLoad: function(e) { if (typeof(e.myParamData) === 'string') { this.myParamData = JSON.parse(e.myParamData); console.log('页面3 数据 = ' + JSON.stringify(e)); } }, methods: { formSubmit: function(e) { console.log('form发生了submit事件,携带数据为:' + JSON.stringify(e.detail.value)); if (this.isClick) { let that = this; setTimeout(function() { that.isClick = false; }, 600) return; } this.isClick = true; var formdata = e.detail.value; this.myParamData = Object.assign(this.myParamData, formdata); console.log('页面3 myParamData=' + JSON.stringify(this.myParamData)); if (formdata['direct'].length < 2) { uni.showModal({ content: '请输入交通指引', showCancel: false }); return; } if (formdata['village'].length < 2) { uni.showModal({ content: '请输入所在小区介绍', showCancel: false }); return; } if (this.photoList.length < 1) { uni.showModal({ content: '请添加房源照片', showCancel: false }); return; } if (this.photoList.length > 6) { uni.showModal({ content: '最多只能选择提交6张图片', showCancel: false }); return; } uni.showLoading({ title: '上传中' }) // 服务器地址上传地址 仅为示例,非真实的接口地址 let baseUrl = "http://gzcc.com/cc//appSc/up" console.log('图片资源 = ' + JSON.stringify(this.photoList)) console.log('请求参数 = ' + JSON.stringify(this.myParamData)); uni.uploadFile({ url: baseUrl, //仅为示例,非真实的接口地址 files: this.photoList, formData: this.myParamData, success: (uploadFileRes) => { uni.hideLoading(); console.log('上传成功 = ' + uploadFileRes.data); } }); }, // 添加多张图片(少于6张) addPhotoClick() { uni.hideLoading(); let myThis = this; if (myThis.photoList.length >= 6) { myThis.photoList = []; } uni.chooseImage({ count: 6, sizeType: ['compressed'], //可以指定是原图还是压缩图,默认二者都有 sourceType: ['album'], //从相册选择 success: function(res) { for (let j = 0; j < res.tempFilePaths.length; j++) { // name:服务端文件接受key  filePath: 需与服务端文件接收字段保持一致 let tmpdict = { 'name': 'image', 'filePath': res.tempFilePaths[j] }; myThis.photoList.push(tmpdict); } console.log('选择图片 =' + JSON.stringify(myThis.photoList)); } }); } } }; </script>

CSS

 
CSS

<style> .uni-form-item .title { padding: 20rpx 0; } .content { display: flex; flex-direction: column; width: 100%; height: auto; } .inputView { flex-direction: row; display: flex; height: 40px; align-items: center; width: 100%; } .line { width: 90%; height: 2rpx; margin-left: -2rpx; background-color: #f8f8f8; margin-left: 5%; } .leftTitle { margin-left: 40rpx; width: 284px; height: 32px; line-height: 32px; font-size: 28rpx; color: #333333; } .rightTextarea { margin-left: 5%; width: 90%; height: 106px; line-height: 40rpx; border-radius: 12rpx; border: solid 1px #F5F5F5; font-size: 15px; } .addPhotoV { margin-top: 7px; margin-bottom: 7px; width: calc((100vw - 70px)/3); height: calc((100vw - 70px)/3.16); margin-left: 17.5px; border-radius: 12rpx; border: solid 1px rgba(58.04%, 76.08%, 88.24%, 0.6); } .uni-btn-v { width: 100%; height: auto; } .botBtn { width: 90%; margin-top: 36px; height: 48px; } .tipText { width: 100%; margin-left: 0px; text-align: center; color: #666666; margin-top: 36px; margin-bottom: 36px; font-size: 28rpx; } </style>
 

.uni-form-item .title { }
.content { display: flex; flex-direction: column; width: 100%; height: auto }
.inputView { flex-direction: row; display: flex; height: 40px; align-items: center; width: 100% }
.line { width: 90%; background-color: rgba(248, 248, 248, 1); margin-left: 5% }
.leftTitle { width: 284px; height: 32px; line-height: 32px; color: rgba(51, 51, 51, 1) }
.rightTextarea { margin-left: 5%; width: 90%; height: 106px; border: 1px solid rgba(245, 245, 245, 1); font-size: 15px }
.addPhotoV { margin-top: 7px; margin-bottom: 7px; width: calc((100vw - 70px) / 3); height: calc((100vw - 70px) / 3.16); margin-left: 17.5px }
.uni-btn-v { width: 100%; height: auto }
.botBtn { width: 90%; margin-top: 36px; height: 48px }
.tipText { width: 100%; margin-left: 0; text-align: center; color: rgba(102, 102, 102, 1); margin-top: 36px; margin-bottom: 36px }

前端vue uni-app多图片上传组件,支持单个文件,多个文件上传 步骤条step使用的更多相关文章

  1. 分享一个react 图片上传组件 支持OSS 七牛云

    react-uplod-img 是一个基于 React antd组件的图片上传组件 支持oss qiniu等服务端自定义获取签名,批量上传, 预览, 删除, 排序等功能 需要 react 版本大于 v ...

  2. js_ajax模拟form表单提交_多文件上传_支持单个删除

    需求场景: 用一个input type="file"按钮上传多张图片,可多次上传,可单独删除,最后使用ajax模拟form表单提交功能提交到指定方法中: 问题:由于只有一个file ...

  3. Jquery的一键上传组件OCUpload及POI解析Excel文件

    第一步:将js文件引入页面 <script type="text/javascript" src="${pageContext.request.contextPat ...

  4. SpringBoot 整合文件上传 elment Ui 上传组件

    SpringBoot 整合文件上传 elment Ui 上传组件 本文章记录 自己学习使用 侵权必删! 前端代码 博主最近在学 elment Ui 所以 前端使用 elmentUi 的 upload ...

  5. ASP.NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件

    前言: 从开始学习Vue到使用element-ui-admin已经有将近快两年的时间了,在之前的开发中使用element-ui上传组件el-upload都是直接使用文件选取后立即选择上传,今天刚好做了 ...

  6. 基于SqlSugar的开发框架循序渐进介绍(13)-- 基于ElementPlus的上传组件进行封装,便于项目使用

    在我们实际项目开发过程中,往往需要根据实际情况,对组件进行封装,以更简便的在界面代码中使用,在实际的前端应用中,适当的组件封装,可以减少很多重复的界面代码,并且能够非常简便的使用,本篇随笔介绍基于El ...

  7. 使用swfupload上传超过30M文件,使用FLASH上传组件

    原文:使用swfupload上传超过30M文件,使用FLASH上传组件 前一段时间会员的上传组件改用FLASH的swfupload来上传,既能很友好的显示上传进度,又能完全满足大文件的上传. 后来服务 ...

  8. 【Vue】计算属性 监听属性 组件通信 动态组件 插槽 vue-cli脚手架

    目录 昨日回顾 1 计算属性 插值语法+函数 使用计算属性 计算属性重写过滤案例 2 监听属性 3 组件介绍和定义 组件之间数据隔离 4 组件通信 父子通信之父传子 父子通信之子传父 ref属性 扩展 ...

  9. Vue.js基础语法(二)组件

    vue学习的一系列,全部来自于表哥---表严肃,是我遇到过的讲课最通透,英文发音最好听的老师,想一起听课就去这里吧 https://biaoyansu.com/i/hzhj1206 把一段经常要用的东 ...

  10. Vue.js 学习笔记 第7章 组件详解

    本篇目录: 7.1 组件与复用 7.2 使用props传递数据 7.3 组件通讯 7.4 使用slot分发内容 7.5 组件高级用法 7.6 其他 7.7 实战:两个常用组件的开发 组件(Compon ...

随机推荐

  1. Thinkpad T14升级Windows11ver22h2失败问题解决小记

    背景 手头的ThinkPad在近一年的时间里每次升级Windows 11的22h2版本每次都会报错,具体有以下几种情况: 更新过程中无问题,重启后黑屏更新过程中会卡在26%左右,然后蓝屏报KENERA ...

  2. vue:路由守卫

    路由守卫 作用:对路由进行权限控制 配置路由守卫应在暴露前配置 分类:全局守卫.独享守卫.组件内守卫 首先先给需要鉴权的路由设置好meta配置项. meta配置项:是vue-router中的一个对象, ...

  3. pandas之统计函数

    Pandas 的本质是统计学原理在计算机领域的一种应用实现,通过编程的方式达到分析.描述数据的目的.而统计函数则是统计学中用于计算和分析数据的一种工具.在数据分析的过程中,使用统计函数有助于我们理解和 ...

  4. [网络/Linux]网络嗅探工具——nmap

    1 nmap 简介 Nmap 即 Network Mapper,最早是Linux下的网络扫描和嗅探工具包. nmap是网络扫描和主机检测的工具,用nmap进行信息收集和检测漏洞,功能有: 检测存活主机 ...

  5. 多态、抽象、Object类

    1.方法重写要求:方法名相同.参数类型相同.返回值相同或其子类返回值相同,子类修饰符要不小于父类 2.方法重载要求:方法名相同.参数类型不同.返回值没有改变.修饰符无关 3.多态的前提是继承.多态是定 ...

  6. SpringBoot项目中使用缓存Cache的正确姿势!!!

    前言 缓存可以通过将经常访问的数据存储在内存中,减少底层数据源如数据库的压力,从而有效提高系统的性能和稳定性.我想大家的项目中或多或少都有使用过,我们项目也不例外,但是最近在review公司的代码的时 ...

  7. mysql迁移:xtrabackup迁移mysql5.7.32

    问题描述:利用外部xtrabackup工具来做迁移mysql数据库,或者恢复数据库 xtrabackup迁移mysql 1.环境 mysql源库 mysql目标迁移库 IP 192.168.163.3 ...

  8. 2023年成都.NET线下技术沙龙活动即将到来!

    MASA技术团队联合成都.NET俱乐部,将在成都市举办一场.NET线下技术沙龙,为.NET开发者创造一次交流学习的契机,我们邀请到的几位技术大咖,将会围绕各自的主题向大家分享他们的技术心得. 本场沙龙 ...

  9. TS(二)内置对象与class类

    内置对象 ECMA内置对象 Boolean.Number.String.RegExp.Date.Error const regexp:RegExp = /\w\d\s const number:Num ...

  10. 环形链表_相交链表_多数元素(java语言)

    环形链表 力扣141题 问题: 思路:创建hashset,把链表的每个节点放到集合中,在放入的过程中检查这个节点是否已经存在,存在则证明存在环. 代码实现: public class Solution ...