Hbuilder中微信小程序上传多图的案例分享

简介: Hbuilder中微信小程序上传多图的案例分享

1、实现效果图如下:
3ba850be675f4c8da49970d2e71ce2be.png
描叙:最后那个加号+是上传图片的按钮。每张图片右上角有删除按钮。

我这里限定每行显示三张图片。

2、具体代码如下:

页面data()中定义一个待上传图片的数组变量 tempFiles:[],:

页面View内容:

<view class="car-list">
                    <view class="car-item" v-for="(item2, index2) in tempFiles" :key="index2">
                        <view :style="{'background-image':'url('+item2.tempFilePath+')','background-repeat':'no-repeat','background-size':'98px 98px'}">
                            <image src="/static/img/c/delete.png" mode="aspectFit" class="deleteImg" @click="deleteCarPhoto(index2)"></image>
                        </view>
                    </view>
                    <view class="car-item">
                        <view style="background-image:url('/static/img/personal/add.png');background-repeat:no-repeat;background-size:98px 98px;" @tap="selectCarPhoto()">
                        </view>
                    </view>
                </view>

car-list 下最后一个car-item 是我们的上传图片添加按钮。

v-for 循环 tempFiles 图片。

methods z中定义添加图片和删除图片的方法:

//添加图片
selectCarPhoto(){
    wx.chooseMedia({
        count: 5,
        mediaType: ['image'],
        sourceType: ['album', 'camera'],
        maxDuration: 30,
        camera: 'back',
        success: (res) => {
            console.log("选择图片成功:"+JSON.stringify(res));
            if(res.errMsg=="chooseMedia:ok"){
                this.tempFiles=this.tempFiles.concat(res.tempFiles);
            }else{
                uni.showToast({
                    title: res.errMsg,
                    icon: "none",
                    position: 'center',
                    duration: 3000
                    });
                }
            },fail: (res) => {
                console.log("选择图片失败:"+res.errMsg);
            }
    })
},
//删除图片
deleteCarPhoto(index){
    this.tempFiles.splice(index,1);
},

3、页面的CSS样式(此处样式可以根据自己需求进行调整)

<style>
.car-list{
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    margin-top:10px;
}
.car-item {
  flex: 1;
  text-align: center;
  margin: 0 10px 10px 0;
  box-sizing: border-box;
}
.car-item view{
    width:100px;
    height: 100px;
}
.car-item:nth-child(3n + 3) {
    margin-right: 0;
}
.deleteImg {
    width: 40rpx !important;
    height: 40rpx !important;
    margin-left: 70px;
}
</style>

4、微信上传文件的方法

注:wx.uploadFile 方法需要小程序设置,上传文件合法域名才可使用。本地测试时,微信开发者工具可以选择不校验合法域名。

uploadCarPhoto(carId){
                //上传
                console.log("开始上传图片");
                uni.showLoading({
                  title: '正在上传车辆图片中......'
                });
                var fileLength=this.tempFiles.length;
//这个参数是我自定义的,为了最后确定是否都上传完毕,因为微信官方文档并没有多图上传功能
                var orderNum=0;
                for (var i = 1; i <= this.tempFiles.length; i++) {
                    let tempFilePath = this.tempFiles[i-1].tempFilePath;
                    wx.uploadFile({
                        url: Common.PROJECT_URL+'/context/XXX/uploadCarPhoto', 
                        filePath: tempFilePath,
                        name: 'car_file',
                        formData: {
                            param1: carId,
                            orderNum: i
                        },
                        success(res) {
                            orderNum=orderNum+1;
                            if(res.statusCode==200){
                                var ret=JSON.parse(res.data);
                                if (ret.code == 1) {
                                    if(orderNum==fileLength){
                                        uni.hideLoading();
                                        wx.showToast({
                                            title: '保存成功',
                                            duration: 2000
                                        });
                                        uni.reLaunch({
                                            url:"/pages/index/index"
                                        });
                                    }
                                }else{
                                    uni.hideLoading();
                                    uni.showToast({
                                        title: ret.message,
                                        icon: "none",
                                        position: 'bottom',
                                        duration: 3000
                                    });
                                }
                            }else{
                                uni.hideLoading();
                                uni.showToast({
                                    title: res.errMsg,
                                    icon: "none",
                                    position: 'bottom',
                                    duration: 3000
                                });
                            }
                        }
                    });
                }
            }

关于微信小程序多图上传,各位大佬还有没有更好的方式呢?欢迎评论区留言,我们共同探讨。

相关文章
|
3天前
|
API 开发者
微信native支付对接案例详解
本文详细介绍了微信Native支付的对接流程,包括效果展示、产品介绍、接入前准备、开发指引、API列表、支付通知等,并强调了只有通过微信认证的服务号才能对接微信支付。每年需支付300元认证费用。
16 3
|
28天前
|
监控 小程序 前端开发
排队免单小程序开发源码案例
“排队免单小程序”旨在通过用户排队行为结合特定规则为用户提供免单或优惠机会,提升用户体验及商家流量。核心功能包括用户注册登录、排队管理、免单规则设置、支付与结算、商家管理和通知提醒等。技术上采用微信小程序开发框架,前后端分离架构,集成微信支付等服务,确保高效安全的数据处理与传输。项目开发过程涵盖需求分析、设计开发、集成测试和上线发布,后期注重数据监控、用户反馈和运营推广,以持续优化用户体验。
|
1月前
|
开发框架 小程序 测试技术
排队免单小程序开发模式案例
排队免单小程序通过线上排队系统,为用户提供便捷的免单机会。主要功能包括用户注册与登录、商家入驻与管理、排队系统、通知与提醒、活动记录与查询。技术实现涉及微信小程序原生开发框架、后端技术、API接口和第三方服务。开发过程还包括全面的测试与优化,确保稳定运行和良好体验。最后,通过提交审核、上线运营和推广策略,吸引更多用户和商家入驻。
|
2月前
|
人工智能 小程序 搜索推荐
成功案例分享|使用AI运动识别插件+微搭,快速搭建AI美体运动小程序
今天给大家分享一个最近使用我们的“AI运动识别小程序插件”+“微搭”搭建小程序的经典案例。
成功案例分享|使用AI运动识别插件+微搭,快速搭建AI美体运动小程序
|
2月前
|
缓存 数据可视化 Serverless
微信小游戏 案例一 像素飞机
微信小游戏 案例一 像素飞机
21 2
|
2月前
|
开发框架 前端开发 JavaScript
微信小游戏案例三 抓星星
微信小游戏案例三 抓星星
96 0
微信小游戏案例三 抓星星
|
2月前
|
JavaScript 小程序 前端开发
微信小程序 案例二 飞机大战
微信小程序 案例二 飞机大战
57 0
微信小程序 案例二 飞机大战
|
2月前
|
小程序 搜索推荐 前端开发
短剧小程序开发案例
首先,明确你的短剧平台的目标用户群体和他们的需求。比如,年轻用户可能更倾向于轻松、幽默的短剧内容,而家庭用户则可能更偏爱教育、亲子类的短剧。了解用户需求有助于你设计更符合他们口味的功能和界面
|
2月前
|
人工智能 小程序 Python
Python编程小案例——编一个事件提醒弹窗小程序
Python编程小案例——编一个事件提醒弹窗小程序
31 0
|
5月前
|
XML Java 数据格式
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法