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

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

  • 小卖家免费推广方式总结(网店免费推广)

    小卖家免费推广方式总结(网店免费推广)

  • 盒马自提怎么操作(盒马app自提怎么操作)

    盒马自提怎么操作(盒马app自提怎么操作)

  • 在钉钉下载的文件在哪里(在钉钉下载的文件在哪)

    在钉钉下载的文件在哪里(在钉钉下载的文件在哪)

  • 支付宝推送的消息在哪里查看(支付宝推送的消息在哪里关闭)

    支付宝推送的消息在哪里查看(支付宝推送的消息在哪里关闭)

  • 充电屏幕不灵怎么解决(充电屏幕失灵怎么回事)

    充电屏幕不灵怎么解决(充电屏幕失灵怎么回事)

  • 抖音导出的视频怎么去水印(抖音导出的视频为什么模糊)

    抖音导出的视频怎么去水印(抖音导出的视频为什么模糊)

  • kingston内存条怎么看(kingston内存条怎么看生产日期)

    kingston内存条怎么看(kingston内存条怎么看生产日期)

  • 朵唯是什么牌子的手机(朵唯是什么牌子的衣服)

    朵唯是什么牌子的手机(朵唯是什么牌子的衣服)

  • 拼多多dsr评分什么时候出来(拼多多dsr评分多少算合格)

    拼多多dsr评分什么时候出来(拼多多dsr评分多少算合格)

  • qq里的星星月亮太阳代表什么(qq里的星星月亮太阳咋变多)

    qq里的星星月亮太阳代表什么(qq里的星星月亮太阳咋变多)

  • 华为p30手机发热是怎么回事(华为p30手机发热关闭应用)

    华为p30手机发热是怎么回事(华为p30手机发热关闭应用)

  • 快手一个铃铛多少快币(快手一个铃铛多少粉丝)

    快手一个铃铛多少快币(快手一个铃铛多少粉丝)

  • wps中怎么统一设置英文字体

    wps中怎么统一设置英文字体

  • 录音和音乐怎么一起放(录音和音乐怎么弄到一起)

    录音和音乐怎么一起放(录音和音乐怎么弄到一起)

  • airpods麦克风没声音(AirPods麦克风没有降噪吗)

    airpods麦克风没声音(AirPods麦克风没有降噪吗)

  • 导航窗口在哪里打开(导航窗口在哪里关闭)

    导航窗口在哪里打开(导航窗口在哪里关闭)

  • 4k画质是什么意思(何为4k画质)

    4k画质是什么意思(何为4k画质)

  • 手机热点身份验证出错(手机热点身份验证出现问题怎么回事)

    手机热点身份验证出错(手机热点身份验证出现问题怎么回事)

  • 淘宝店铺二维码怎么弄(淘宝店铺二维码怎么扫)

    淘宝店铺二维码怎么弄(淘宝店铺二维码怎么扫)

  • 显示屏音频接口有啥用(显示屏音频接口在哪)

    显示屏音频接口有啥用(显示屏音频接口在哪)

  • 微信读书30天无限卡怎么用(微信读书503)

    微信读书30天无限卡怎么用(微信读书503)

  • 计算机首字下沉在哪(计算机首字下沉两行怎么设置)

    计算机首字下沉在哪(计算机首字下沉两行怎么设置)

  • 微转转能提现吗(微转转账)

    微转转能提现吗(微转转账)

  • oppoa9x处理器是什么(oppoa9x手机处理器是什么)

    oppoa9x处理器是什么(oppoa9x手机处理器是什么)

  • boss直聘如何屏蔽公司(boss直聘怎么能让别人看不到我)

    boss直聘如何屏蔽公司(boss直聘怎么能让别人看不到我)

  • 中央公园,纽约 (© Tony Shi Photography/Getty Images)(中央公园纽约的历史背景)

    中央公园,纽约 (© Tony Shi Photography/Getty Images)(中央公园纽约的历史背景)

  • 盘点Redis常用操作(redis的)

    盘点Redis常用操作(redis的)

  • 一般纳税人的进销项税怎么做分录
  • 一般纳税人发生特定应税销售行为
  • 物业公司物业费不开发票
  • 财务报表申报有税额吗
  • 房地产收入成本确认
  • 一般纳税人所得税优惠政策最新2022
  • 餐饮消费方式
  • 准予以后纳税年度结转扣除的项目有
  • 支付一年房租计入什么科目
  • 发微信验证消息
  • 会计人士教你在Excel中如何计算年均增长率
  • 城镇土地使用税的计税依据
  • 冲销预付款的会计分录
  • 固定资产入账必须有发票吗
  • 集体劳动合同与劳动合同的区别
  • 代发工资超过5000 可以不交税吗
  • 取得抵债房产的涉税风险,你清楚吗?
  • 增值税即征即退属于政府补助吗
  • 海外佣金税务怎么缴纳
  • 资金池利息收入计入投资收益吗
  • 外贸出口退税会计和会计区别
  • linux路由器配置实例
  • mac系统怎么添加网络映射
  • 支付宝账户收到100块钱如何用
  • excel多表操作法
  • 原材料入库时如何计价
  • vue项目难点及解决方法
  • 企业通讯费管理办法
  • thinkphp 部署
  • 完成认证后开具什么证明
  • PyTorch 深度学习实战 |用 TensorFlow 训练神经网络
  • js 数组中的重数
  • node_sass
  • java基础变量字节
  • 在建工程预付款超过审计价怎么办
  • mysql一次io
  • phpcms怎么样
  • 存货成本明细科目表
  • 劳务外经证预缴税款
  • 生育津贴到公司了公司什么时候发给个人
  • 一般纳税人销售自己使用过的汽车
  • 经营性应收项目的减少调增 为什么是减
  • 鸡蛋的发票
  • 小规模纳税人如何升级为一般纳税人
  • 加油卡充值可以开增值税专用发票吗
  • 报销粘贴单怎么粘贴发票
  • 什么是全面预算控制?全面预算控制的作用有哪些?
  • 长期股权投资的账务处理
  • 企业所得税弥补亏损可以弥补几年
  • 费用分摊怎么开口说好
  • 金融工具减值准则
  • mysql 查询范围
  • mysql很卡
  • mysql8.0远程连接
  • mysql 存过
  • 微软补丁修复时出现蓝屏现象
  • win10自动
  • ubuntu20.04怎么安装
  • 电脑系统win7怎么看
  • win10系统预览版
  • mac版cad2022使用教程
  • windowsxp忘了登录密码
  • win7系统自带刻录启用
  • win8电脑屏幕亮度调节在哪里设置
  • linux br0配置
  • win7提示计算机内存不足
  • linux文本操作命令
  • android手机传感器应用程序
  • jQuery通过ajax快速批量提交表单数据
  • node+express+ejs使用模版引擎做的一个示例demo
  • pythoni脚本
  • pythone爬虫
  • W3C Group的JavaScript1.8 新特性介绍
  • javascript面向对象精要pdf下载
  • jquery轮播图原理
  • 深圳电子税务局app
  • 网上预约挂号能退吗
  • 怎么样开通深圳医保
  • 企业内部清欠的措施和做法
  • 上海个体工商户怎么报税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设