位置: IT常识 - 正文

uniapp、uview——图片上传(单图上传、多图上传、多组照片上传、图片回显)(uniapp+uview)

编辑:rootadmin
uniapp、uview——图片上传(单图上传、多图上传、多组照片上传、图片回显) 一、简介

推荐整理分享uniapp、uview——图片上传(单图上传、多图上传、多组照片上传、图片回显)(uniapp+uview),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:uni-app app.vue,uniapp和uview,uniapp+uview,uniapp使用weui,uniapp v-for,uniapp使用weui,uniapp v-for,uniapp+uview,内容如对您有帮助,希望把文章链接给更多的朋友!

uView组件的上传功能,单图上传、多图上传等。 官方文档地址: https://www.uviewui.com/components/upload.html

二、步骤(一)单图上传1.效果演示:

只能上传一张,选完之后,上传的按钮消失,当然,如果图片不合适,删掉再换一张,但就是只能上传一张。

2.代码:<template><view class="content"><!-- 上传图片 --><u-upload :fileList="fileList1" @afterRead="afterRead" @delete="deletePic" name="1" :multiple="false" :maxCount="1" width="112rpx" height="109rpx" :deletable="true" :previewImage="true"> <!-- 这张图片就是自定义的图片,地址填写自己本地的就行 --><image src="/static/function/uploadImg.png" mode="widthFix" style="width: 112rpx;height: 110rpx;"></image></u-upload></view></template><script>export default {data() {return {// 上传图片fileList1: [],}},onLoad() {},methods: { //删除图片deletePic(e) {console.log(e);this[`fileList${e.name}`].splice(e.index, 1)},// 新增图片async afterRead(event) {console.log(event)// 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式let lists = [].concat(event.file)let fileListLen = this[`fileList${event.name}`].lengthlists.map((item) => {this[`fileList${event.name}`].push({...item,status: 'uploading',message: '上传中'})})for (let i = 0; i < lists.length; i++) {const result = await this.uploadFilePromise(lists[i].url)let item = this[`fileList${event.name}`][fileListLen]this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {status: 'success',message: '',url: result}))fileListLen++}},//上传图片uploadFilePromise(url) {return new Promise((resolve, reject) => {let a = uni.uploadFile({//url: this.$common.domain+'/api/common/upload', // 仅为示例,非真实的接口地址url:'http://192.168.2.21:7001/upload', // 仅为示例,非真实的接口地址filePath: url,name: 'file',formData: {user: 'test'},success: (res) => {let data=JSON.parse(res.data) //最终传给的是字符串,这里需要转换格式resolve(data.data.url)}});})},}}</script><style lang="scss"></style>(二)多图上传1.效果演示:uniapp、uview——图片上传(单图上传、多图上传、多组照片上传、图片回显)(uniapp+uview)

可一次性选多张,我这里限制为两张,上传满两张则不会显示上传的logo。点击图片可预览。

2.代码:<template><view class="content"><!-- 上传图片 --><u-upload :fileList="fileList1" @afterRead="afterRead" @delete="deletePic" name="1" :multiple="true" :maxCount="2" width="112rpx" height="109rpx" :deletable="true" :previewImage="true"> <!-- 这张图片就是自定义的图片,地址填写自己本地的就行 --><image src="/static/function/uploadImg.png" mode="widthFix" style="width: 112rpx;height: 110rpx;"></image></u-upload></view></template><script>export default {data() {return {// 上传图片fileList1: [],}},onLoad() {},methods: { //删除图片deletePic(e) {console.log(e);this[`fileList${e.name}`].splice(e.index, 1)},// 新增图片async afterRead(event) {console.log(event)// 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式let lists = [].concat(event.file)let fileListLen = this[`fileList${event.name}`].lengthlists.map((item) => {this[`fileList${event.name}`].push({...item,status: 'uploading',message: '上传中'})})for (let i = 0; i < lists.length; i++) {const result = await this.uploadFilePromise(lists[i].url)let item = this[`fileList${event.name}`][fileListLen]this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {status: 'success',message: '',url: result}))fileListLen++}},//上传图片uploadFilePromise(url) {return new Promise((resolve, reject) => {let a = uni.uploadFile({//url: this.$common.domain+'/api/common/upload', // 仅为示例,非真实的接口地址url:'http://192.168.2.21:7001/upload', // 仅为示例,非真实的接口地址filePath: url,name: 'file',formData: {user: 'test'},success: (res) => {setTimeout(() => {resolve(res.data.data)}, 1000)}});})},}}</script><style lang="scss"></style>三、其余补充

如果一个页面上有多处上传,操作也不是很复杂,大家都是共用同一个方法。 整体搬过来用即可。 请求接口的地方需要用join处理一下

getData() {let images=[]this.fileList1.forEach((item)=>{images.push(item.url)})this.$common.request('post', '/Coupon/addCoupon', {image:images.join(','),}).then(res => {if (res.code == 1) {this.$common.success(res.msg)setTimeout(()=>{this.$common.back()},1200)}})},新上传代码:(多图处理)<view class="imgBox"><u-upload :fileList="fileList" @afterRead="afterRead" @delete="deletePic" :multiple="true" :maxCount="9"><image :src="$common.image('/static/talentZone/addImg.png')" mode="aspectFill" class="fileImg"></image></u-upload></view>data() {return {// 图片列表fileList: []}},methods: {// 图片上传//删除图片deletePic(e) {console.log(e);this.fileList.splice(e.index, 1)},// 新增图片async afterRead(event) {// 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式let lists = [].concat(event.file)let fileListLen = this.fileList.lengthlists.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)console.log(result);if(result.success){let item = this.fileList[fileListLen]this.fileList.splice(fileListLen, 1, Object.assign(item, {status: 'success',message: '',url: result}))fileListLen++}else{this.fileList.splice(fileListLen, 1)}}},//上传图片uploadFilePromise(url) {return new Promise((resolve, reject) => {let a = uni.uploadFile({url:'http://192.168.2.21:7001/upload', // 仅为示例,非真实的接口地址,换成自己上传图片的接口filePath: url,name: 'file',success: (uploadRes) => {setTimeout(()=>{let res = JSON.parse(uploadRes.data) //最终传给的是字符串,这里需要转换格式if(res.code == 0){this.$common.msg(res.msg)resolve({success:false,url:''})return;}resolve({success:true,url:res.data.url})},2000)}});})},//点击确认还需要些许修改fabu() {let images = []this.fileList.forEach((item) => {images.push(item.url.url)})// 其他接口request('post', '其他接口地址', {title: this.textValue,info: this.textValue,images: images.join(',')//重点是这里,需要看后台接收的类型进行更改}).then(res => {if (res.code == 1) {console.log(res);}})},}图片上传// 图片上传//删除图片deletePic(event) {this[`fileList${event.name}`].splice(event.index, 1)},// 新增图片async afterRead(event) {// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式let lists = [].concat(event.file)let fileListLen = this[`fileList${event.name}`].lengthlists.map((item) => {this[`fileList${event.name}`].push({...item,status: 'uploading',message: '上传中'})})for (let i = 0; i < lists.length; i++) {const result = await this.uploadFilePromise(lists[i].url)console.log("结果", result);if (result.success) {let item = this.fileList[fileListLen]this.fileList.splice(fileListLen, 1, Object.assign(item, {status: 'success',message: '',url: result}))fileListLen++} else {this.fileList.splice(fileListLen, 1)}}},uploadFilePromise(url) {return new Promise((resolve, reject) => {let a = uni.uploadFile({url: config[config.env].apiUrl + '/api/common/upload', // 仅为示例,非真实的接口地址filePath: url,name: 'file',formData: {user: 'test'},success: (uploadRes) => {setTimeout(() => {let res = JSON.parse(uploadRes.data) //最终传给的是字符串,这里需要转换格式if (res.code == 0) {this.$common.msg(res.msg)resolve({success: false,url: ''})return;}console.log("图片", res);resolve({success: true,url: res.data.url})}, 1000)}});})},单图传值data(){return{payment_credentials:''//支付凭证(线下必填)}},methods: {aaa(){if (this.fileList.length > 0) {this.payment_credentials = this.fileList[0].url.url}}}图片回显

当内容进行修改时,需要先将上次上传过的图片进行显示(后台会返回图片数组),之后或许删除上次中的某种图片,也有可能会新上传一些图片。最后提交给后台的数据的图片数组是不带域名的。 整体步骤如下:

data() {return {// 图片列表fileList: [],//修改功能 需要提交的图片数组subImg:[]}},1.修改,根据id 进行查询此条数据的信息,后台返回该条数据信息,这里只说图片的事。首先对images进行处理,字符串转化为数组,之后对分割后的数组subImg进行遍历循环,把图片路径(拼接好域名之后)push到fileList数组里面,这时候页面的图片就能显示了。this.subImg = res.data.images.split(',') //字符串转化为数组this.subImg.forEach(item=>{console.log(item);this.fileList.push({url: this.$common.image(item)//拼接好域名之后push进去})})console.log(this.fileList);

2.由于修改之后提交给后台的图片数组是不带域名的,所以自定义了一个subImg数组,刚上来的时候就已经赋进去了最初始的两张图,如果删除,就根据删除的下标删除掉此数组里面的图片,每次上传新图片的时候,就把新上传后返回的图片路径push进去,这样 不管是删除还是新增都能保证sunImg数组里面的图片都是最新的,且不带域名

核心代码:

this.subImg.splice(e.index, 1)this.subImg.push(res.data.url)

具体代码:

//删除图片deletePic(e) {console.log(e);this.fileList.splice(e.index, 1)this.subImg.splice(e.index, 1) //新增删除代码},// 新增图片async afterRead(event) {// 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式let lists = [].concat(event.file)let fileListLen = this.fileList.lengthlists.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)console.log(result);if (result.success) {let item = this.fileList[fileListLen]this.fileList.splice(fileListLen, 1, Object.assign(item, {status: 'success',message: '',url: result}))fileListLen++} else {this.fileList.splice(fileListLen, 1)}}},//上传图片uploadFilePromise(url) {return new Promise((resolve, reject) => {let a = uni.uploadFile({url: config[config.env].apiUrl + '/api/common/upload',filePath: url,name: 'file',success: (uploadRes) => {setTimeout(() => {let res = JSON.parse(uploadRes.data) //最终传给的是字符串,这里需要转换格式if (res.code == 0) {this.$common.msg(res.msg)resolve({success: false,url: ''})return;}console.log("图片", res.data.url);this.subImg.push(res.data.url) //新增添加代码resolve({success: true,url: res.data.url})}, 2000)}});})},
本文链接地址:https://www.jiuchutong.com/zhishi/283634.html 转载请保留说明!

上一篇:ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 1

下一篇:绿萝怎么养(图文)(绿萝怎么样养)

  • 拼多多总账单在哪查(拼多多总账单在哪里查看)

    拼多多总账单在哪查(拼多多总账单在哪里查看)

  • 自家wifi如何不让别人用(自己家的wifi怎么才能不让别人连)

    自家wifi如何不让别人用(自己家的wifi怎么才能不让别人连)

  • 光能体脂秤没电了怎么办(tomozaki体脂秤没电了)

    光能体脂秤没电了怎么办(tomozaki体脂秤没电了)

  • 苹果ac可以补买吗(苹果ac补买时间)

    苹果ac可以补买吗(苹果ac补买时间)

  • 华为手机恢复出厂设置会不会影响使用(华为手机恢复出厂设置系统会回到原来的系统吗)

    华为手机恢复出厂设置会不会影响使用(华为手机恢复出厂设置系统会回到原来的系统吗)

  • 手机qq屏幕共享能听到视频的声音吗(手机qq屏幕共享怎么共享视频声音)

    手机qq屏幕共享能听到视频的声音吗(手机qq屏幕共享怎么共享视频声音)

  • 开关机声音在哪里设置(开关机铃声在哪里)

    开关机声音在哪里设置(开关机铃声在哪里)

  • 微信每天加多少人会被限制(微信每天加多少好友会被限制)

    微信每天加多少人会被限制(微信每天加多少好友会被限制)

  • b站卸载了重装缓存还在吗(b站卸载了重装会怎么样)

    b站卸载了重装缓存还在吗(b站卸载了重装会怎么样)

  • iphone8plus点击屏幕唤醒(苹果8p怎么点一下屏幕就亮)

    iphone8plus点击屏幕唤醒(苹果8p怎么点一下屏幕就亮)

  • 魅族手机强制重启按哪两个(魅族手机强制重启怎么操作)

    魅族手机强制重启按哪两个(魅族手机强制重启怎么操作)

  • 小米平板4有定位功能吗(小米平板4定位)

    小米平板4有定位功能吗(小米平板4定位)

  • 蓝牙耳机降噪什么意思(蓝牙耳机降噪什么技术)

    蓝牙耳机降噪什么意思(蓝牙耳机降噪什么技术)

  • qq群举报别人会被知道吗(qq群举报别人会封号吗)

    qq群举报别人会被知道吗(qq群举报别人会封号吗)

  • 苹果x密码忘了怎么解锁(苹果x密码忘了怎么恢复出厂设置)

    苹果x密码忘了怎么解锁(苹果x密码忘了怎么恢复出厂设置)

  • 美图秀秀怎么搞证件照(美图秀秀怎么搞模糊)

    美图秀秀怎么搞证件照(美图秀秀怎么搞模糊)

  • 坚果pro3支持双卡双待吗(坚果pro3支持双移动)

    坚果pro3支持双卡双待吗(坚果pro3支持双移动)

  • macbook pro垃圾清理(macbookpro怎么清除垃圾)

    macbook pro垃圾清理(macbookpro怎么清除垃圾)

  • 抖音手机停机了换绑(抖音手机停机了怎么取消橱窗退保证金了)

    抖音手机停机了换绑(抖音手机停机了怎么取消橱窗退保证金了)

  • 微博怎么修改手机型号(微博怎么修改手机标识)

    微博怎么修改手机型号(微博怎么修改手机标识)

  • 华为lndtl40什么型号(华为lnd-al40)

    华为lndtl40什么型号(华为lnd-al40)

  • vue拍摄时间怎么设置(vue照片时间设置)

    vue拍摄时间怎么设置(vue照片时间设置)

  • 荣耀畅玩9x是屏幕指纹吗(华为荣耀畅玩9x参数)

    荣耀畅玩9x是屏幕指纹吗(华为荣耀畅玩9x参数)

  • 华为p30呼叫等待怎么设置(华为p30呼叫等待怎么取消)

    华为p30呼叫等待怎么设置(华为p30呼叫等待怎么取消)

  • 在win7系统中,桌面常见图标消失了是怎么回事?(在win7系统中如何让电脑恢复出厂设置方法)

    在win7系统中,桌面常见图标消失了是怎么回事?(在win7系统中如何让电脑恢复出厂设置方法)

  • 前端get/post等请求后,一直处于pending状态,解决办法(前端get请求传多个参数)

    前端get/post等请求后,一直处于pending状态,解决办法(前端get请求传多个参数)

  • 如何使用OpenAI fine-tuning(微调)训练属于自己专有的ChatGPT模型?(如何使用openAI总结小说内容)

    如何使用OpenAI fine-tuning(微调)训练属于自己专有的ChatGPT模型?(如何使用openAI总结小说内容)

  • 小规模普通发票要交税吗
  • 私车公用是否合法
  • 单张发票金额有多少
  • 个体工商户的个税税率表
  • 律师事务所的账务流程
  • 注销了出口退税怎么办
  • 增值税普通发票几个点
  • 外购商品对外捐赠分录
  • 车辆报废收入如何处理
  • 公司未开展业务就没有债权债务吗
  • 加工样品全流程总结
  • 公司内部食堂招待费账务处理
  • 0退税产品怎么征税
  • 免费样品销售给客户计入什么科目
  • 3个点的发票有哪些
  • 小规模收到货运专用发票
  • 税控发票系统
  • 电梯的运行与维护
  • 发改委规定电网企业职工福利费
  • 收到畜禽无害化处罚通知
  • 如何正确安装和使用电脑
  • 什么是工商企业为了筹集资金而发行的债券
  • win10回退到以前版本失败
  • 华为分享连接电脑显示检查您的拼写
  • 计提工资时个税是计提上月的吗
  • 计提税金及附加怎么算
  • 计提长期待摊费用的会计分录
  • 财务决算报表是谁编制的
  • php实现文件上传
  • 收益类账户的会计分录
  • 微信php开发教程
  • 收取包装物押金税率
  • 资产减值损失的计算公式
  • 停产企业税收申请减免
  • 企业租赁房屋怎么开票
  • thinkphp框架的作用
  • thinkphp教程
  • 35.JavaScript对象和数组的解构赋值基础详解、let陷阱、函数参数解构
  • 应收账款的
  • 收到招标文件怎么回函
  • 深究Python中的asyncio库-shield函数
  • 商贸公司库存商品怎么做分录
  • 行政单位预算外收入有哪些
  • java中map.entry
  • 企业交房租没有发票能充费用吗
  • 应收账款余额在借方还是贷方
  • 自然人扣缴客户端恢复数据
  • 支付定金的账务怎么处理
  • 单位结算卡和对公账户号码不一样
  • 分期付款服务费是什么
  • 进项抵扣怎么操作
  • 小规模企业缴纳公积金怎么做账
  • 未认证的进项税发票入账
  • 现金日记账是会计人员根据审核后的
  • 半成品会计处理流程
  • 用友软件如何反结账流程
  • 建账的基本要求
  • ubuntu如何回到桌面
  • 微软发布linux
  • linux系统中可用于添加用户账号
  • centos更新yum update
  • 苹果电脑怎么下魔兽争霸
  • Linux下查看某一个程序所使用的内存方法
  • linux怎么设置桌面
  • win7电脑出现广告弹窗怎么办
  • es6数组函数
  • nodejs rbac
  • cmd命令进行ftp下载文件夹
  • opengl纹理错误变成条纹
  • 怎么看判断
  • node.js使用教程
  • 回弹健腹轮是智商税吗
  • js轮播图视频教程
  • bootstrap需要学多久
  • python toga
  • 二手车公司如何运营
  • 云南地方税务局电话
  • 江西省税务局电话号码查询
  • 昆明市地方税务局稽查局局长
  • 个人利息收入属于什么收入
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设