news 2026/7/22 17:41:27

uni-app/vue3的图片上传功能

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
uni-app/vue3的图片上传功能

1.静态页面的书写

<!-- 4.修复实拍照片 --> <view class="form-item"> <text class="label">修复实拍照片</text> <view class="upload-wrap"> <button class="upload-btn" @click="chooseRepairImg">上传照片(最多3张)</button> <scroll-view scroll-x class="img-scroll" v-if="repairImgList.length > 0"> <view class="img-item" v-for="(img, idx) in repairImgList" :key="idx"> <image :src="img.address" class="preview-img" mode="aspectFill"></image> <text class="del-img" @click="delRepairImg(img.id,idx)">×</text> </view> </scroll-view> </view> </view>

2.script里逻辑的书写

1.首先要定义一个存储图片的数组

const repairImgList = ref([]) // 修复实拍

2.然后书写选择图片上传的函数

const chooseRepairImg = () => { uni.chooseImage({ count: 3, sizeType: ['compressed'], //使用的是压缩的图片 quality: 60, sourceType: ['camera', 'album'], //图片的来源,相机或者相册 success: res => { repairImgList.value = [...repairImgList.value, ...res.tempFilePaths] } }) }

3.写上删除图片的逻辑,根据图片数组里的图片的id删除图片

const delRepairImg = async (id, idx) => { const res = await uni.$http.put(`/take/delectImgTest?id=${id}`) console.log("删除接口测试", res) repairImgList.value.splice(idx, 1) }

4.然后开始上传图片的工作,因为这里面的请求是独立于全局的拦截器,相应器和http请求的,所以要重新去写请求携带的token,baseUrl等设置,id是后端请求的参数,在formData里面

const uploadSingleImg = (filePath) => { const token = uni.getStorageSync('token') const baseUrl = uni.$http.baseUrl const id = props.item.id return new Promise((resolve, reject) => { uni.uploadFile({ url: `${baseUrl}/take/uploadImgs`, filePath, name: 'files', header: { Authorization: token, Token: token }, formData: { id: String(id) }, success: res => { try { const data = JSON.parse(res.data) if (data.code === 200 && Array.isArray(data.data) && data.data.length) { resolve(data.data[0]) } else reject('上传未返回图片地址') } catch (err) { reject('接口返回格式错误') } }, fail: err => reject(err.errMsg) }) }) }

5.因为一次性可能传多张图片,所以可能要进行图片的批量上传,参数是图片数组,在这里循环调用单张图片上传的逻辑

// 批量上传一组图片 const uploadImgGroup = async (tempList) => { const urls = [] for (const path of tempList) { urls.push(await uploadSingleImg(path)) } return urls }

3.后言(可能需要)

因为我做的是一个弹窗组件,可能会将信息传给父组件使用,所以这个提交按钮可能会需要

// 提交:上传图片,整合所有数据抛出给父组件 const handleSubmit = async () => { uni.showLoading({ title: '提交中...' }) try { // 分别上传修复、测试图片 const repairImgs = await uploadImgGroup(repairImgList.value) // 传给父组件完整结构 emit('submit', { repairImgs, // 修复实拍线上图数组 }) } catch (err) { uni.showToast({ title: err, icon: 'none' }) } finally { uni.hideLoading() } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 17:39:48

深入解析eHRPWM寄存器:从时间基准到动作限定的电机控制核心

1. 从时间基准到动作限定&#xff1a;eHRPWM寄存器全景解析在嵌入式电机控制和数字电源的世界里&#xff0c;PWM&#xff08;脉冲宽度调制&#xff09;是驱动一切的“心跳”。但很多工程师&#xff0c;尤其是刚接触德州仪器&#xff08;TI&#xff09;C2000系列MCU的朋友&#…

作者头像 李华
网站建设 2026/7/22 17:39:37

Tekton Catalog 故障排查:解决任务运行常见问题的 10 个方案

Tekton Catalog 故障排查&#xff1a;解决任务运行常见问题的 10 个方案 【免费下载链接】catalog Catalog of shared Tasks and Pipelines. 项目地址: https://gitcode.com/gh_mirrors/catalog3/catalog Tekton Catalog 是 Kubernetes 原生的 CI/CD 框架&#xff0c;提…

作者头像 李华
网站建设 2026/7/22 17:39:20

13.Linux 服务管理(从零开始学)

&#xff01;&#xff01;&#xff01;在开启一天的学习的时候&#xff0c;先做好快照&#xff0c;过程中如果出现意外的报错&#xff0c;解决不了的就立即恢复快照&#xff0c;作为初学者&#xff0c;省时省力&#xff0c;不要过于纠结哪里错了&#xff0c;浪费时间&#xff0…

作者头像 李华
网站建设 2026/7/22 17:39:04

深入解析PRU指令集:实时控制与嵌入式系统的高效编程指南

1. PRU指令集&#xff1a;实时控制领域的“瑞士军刀”在嵌入式实时控制的世界里&#xff0c;处理器不仅要算得快&#xff0c;更要“反应快”。当你在设计一个需要微秒级甚至纳秒级响应的系统&#xff0c;比如高速电机驱动、数字电源或者工业通信协议转换时&#xff0c;通用处理…

作者头像 李华
网站建设 2026/7/22 17:38:40

2026年北京宠物寄养新选择:口碑佳店大揭秘

随着现代都市生活的快节奏&#xff0c;越来越多的宠物主人面临着一个共同的问题&#xff1a;外出时无人照看宠物。尤其是在北京这样的大城市&#xff0c;宠物寄养服务的需求日益增长。然而&#xff0c;如何选择一家既能让宠物舒适&#xff0c;又能让自己放心的寄养机构呢&#…

作者头像 李华
网站建设 2026/7/22 17:37:06

3分钟掌握Go数据库操作:sqlx让你的开发效率提升300%

3分钟掌握Go数据库操作&#xff1a;sqlx让你的开发效率提升300% 【免费下载链接】sqlx general purpose extensions to golangs database/sql 项目地址: https://gitcode.com/gh_mirrors/sq/sqlx Go语言开发者们&#xff0c;还在为繁琐的数据库操作代码而烦恼吗&#xf…

作者头像 李华