位置: 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

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

  • 小米10如何打开导航键(小米10如何打开无线充电)

    小米10如何打开导航键(小米10如何打开无线充电)

  • 微信连麦睡觉自动挂断

    微信连麦睡觉自动挂断

  • 微信信誉积分在哪里查看(微信信誉积分查询)

    微信信誉积分在哪里查看(微信信誉积分查询)

  • p40中国开售时间(p40国内什么时候卖)

    p40中国开售时间(p40国内什么时候卖)

  • 快手申请仲裁是什么意思(快手退款申请仲裁会被退款吗)

    快手申请仲裁是什么意思(快手退款申请仲裁会被退款吗)

  • 手机屏幕发黄是什么原因造成的(手机屏幕发黄是质量问题吗)

    手机屏幕发黄是什么原因造成的(手机屏幕发黄是质量问题吗)

  • word文档出现点点点(word文档出现点点点把有些都自动删掉了)

    word文档出现点点点(word文档出现点点点把有些都自动删掉了)

  • 顺风车没人接单怎么办(为什么滴滴顺风车没人接单)

    顺风车没人接单怎么办(为什么滴滴顺风车没人接单)

  • 6s是a几处理器(苹果12用的什么处理器)

    6s是a几处理器(苹果12用的什么处理器)

  • 钉钉电话为什么不响铃(钉钉电话为什么不响铃,设置都打开了)

    钉钉电话为什么不响铃(钉钉电话为什么不响铃,设置都打开了)

  • 抖音未成年怎么开直播(抖音未成年怎么充值)

    抖音未成年怎么开直播(抖音未成年怎么充值)

  • 苹果x一听微信语音就黑屏(苹果一听微信语音就黑屏怎么处理)

    苹果x一听微信语音就黑屏(苹果一听微信语音就黑屏怎么处理)

  • 手机上面显示volte是什么意思(手机上面显示VoLTE是什么意思)

    手机上面显示volte是什么意思(手机上面显示VoLTE是什么意思)

  • multisim中蜂鸣器不响(multisim中蜂鸣器为什么不响)

    multisim中蜂鸣器不响(multisim中蜂鸣器为什么不响)

  • 抖音110405错误代码怎么办(抖音110405错误代码)

    抖音110405错误代码怎么办(抖音110405错误代码)

  • 微信看不到对方朋友圈但是能发消息(微信看不到对方朋友圈点赞)

    微信看不到对方朋友圈但是能发消息(微信看不到对方朋友圈点赞)

  • 微信对方拒收消息对方能看到吗(微信对方拒收消息怎么加好友)

    微信对方拒收消息对方能看到吗(微信对方拒收消息怎么加好友)

  • 家用网线超5类还是6类(家用网线超5类路由器wifi6)

    家用网线超5类还是6类(家用网线超5类路由器wifi6)

  • ipad怎么恢复旧系统(ipad如何恢复旧版本)

    ipad怎么恢复旧系统(ipad如何恢复旧版本)

  • 苹果手机电池突然耗电很快是什么原因(苹果手机电池突然变成1%)

    苹果手机电池突然耗电很快是什么原因(苹果手机电池突然变成1%)

  • 4g独显什么意思(4g独显和4g的区别)

    4g独显什么意思(4g独显和4g的区别)

  • 电视和手机在同一个wifi为什么不能投屏

    电视和手机在同一个wifi为什么不能投屏

  • 手机qq怎么看黑名单(手机QQ怎么看黑钻时间)

    手机qq怎么看黑名单(手机QQ怎么看黑钻时间)

  • 苹果11微信美颜怎么开(苹果11微信美颜功能在哪里设置)

    苹果11微信美颜怎么开(苹果11微信美颜功能在哪里设置)

  • 怎么取消携程的优选预定(怎么取消携程的银行卡绑定)

    怎么取消携程的优选预定(怎么取消携程的银行卡绑定)

  • 华为手机像素信息在哪儿看(华为手机像素多少在哪里找啊)

    华为手机像素信息在哪儿看(华为手机像素多少在哪里找啊)

  • 小米ai音箱如何播放网易云音乐(小米AI音箱如何使用)

    小米ai音箱如何播放网易云音乐(小米AI音箱如何使用)

  • 开了移动数据不能上网(开移动数据不用会变少吗)

    开了移动数据不能上网(开移动数据不用会变少吗)

  • 服务型公司要交多少税
  • 递延所得税负债转回怎么理解
  • 公司会计日常工作内容
  • 资产损失税前扣除管理办法 税屋
  • 缓交的社保费,包括个人部分
  • 待处理财产损益年底怎么处理
  • 电子发票会自动发送到邮箱吗
  • 汇算清缴报告和审计报告有什么区别
  • 存货质押贷款风险
  • 应付账款少记违反什么认定
  • 建筑施工企业工伤保险费率
  • 在建工程购买的设备计入哪个科目
  • 小规模纳税人工程服务的增值税率
  • 广告业务增值税
  • 做企业所得税汇算清缴前需要准备什么资料
  • 佣金增值税
  • 增值税专用发票开票必填项
  • 股权购买会计分录
  • 审计费的会计科目
  • 建筑企业存款账户
  • 向客户的续期相关通知
  • 本年利润有期末余额吗
  • 发票总金额怎么算折扣
  • 出口退税计算方法是免退税吗
  • 坏账准备递延所得税资产,不缴所得税
  • 购进货物不能抵扣进项税额
  • 核定征收和查账征收,交的税一样吗
  • mac option开机
  • 一般纳税人购进农产品如何抵扣进项税额
  • 收到折扣负数发票如何入账
  • linux怎么用gcc编译c程序
  • dotnetfx35.exe
  • 稿酬特许权使用费的预扣率是多少
  • php-cpp
  • 计划成本核算的账务处理
  • 从小规模纳税人购进农产品进项税怎么计算
  • 大群的芒基蝠鲼跃出水面,墨西哥加利福尼亚湾 (© Mark Carwardine/Minden Pictures)
  • 小规模纳税人和一般纳税人的区别
  • 微服务架构java框架
  • 持有待售资产是流动还是非流动
  • vue中v-model
  • 育空河24102
  • spring ioc di aop
  • 电子税务局附加税退税在哪看
  • 小规模纳税人增值税税率
  • python2打包
  • 固定资产盘盈、盘亏的账务处理?
  • 合伙结算转借款
  • 出租房屋房产税计算
  • 其他应收款借贷方表示什么意思
  • 为什么选择我们公司
  • mysql 随机抽样
  • 企业所得税计算题及答案解析
  • 城建税的征收范围不包括农村
  • 劳务合同如果不发工资怎么办
  • 无形资产处置的相关费用计入哪里
  • 跨年租赁费会计分录
  • 收到一张发票摘要怎么填
  • 营销策划服务费属于什么服务
  • 月末忘记结转怎么办
  • 道路施工企业的上级监管部门是谁
  • 可交换债券发行方的会计处理
  • oracle忘记用户名密码怎么办
  • mysql数据库增加列
  • win7提示oxcooooo98
  • 微软更新kb4474419
  • win10系统自带的游戏在哪
  • centos7如何设置中文
  • centos中如何查看ip地址
  • mac睡眠后黑屏
  • win7蓝屏是因为哪个补丁
  • 怎么给异地的人订外卖
  • Extjs4 类的定义和扩展实例
  • 用css滤镜实现的代码
  • 执行shell脚本方式
  • 安卓打包安装程序apk
  • 青岛税务局领导
  • 江苏国家税务机关电话
  • 胡世军简历年龄多大
  • 苏州国税电子税务局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设