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
                                });
                            }
                        }
                    });
                }
            }

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

相关文章
|
26天前
|
人工智能 小程序 搜索推荐
成功案例分享|使用AI运动识别插件+微搭,快速搭建AI美体运动小程序
今天给大家分享一个最近使用我们的“AI运动识别小程序插件”+“微搭”搭建小程序的经典案例。
成功案例分享|使用AI运动识别插件+微搭,快速搭建AI美体运动小程序
|
24天前
|
缓存 数据可视化 Serverless
微信小游戏 案例一 像素飞机
微信小游戏 案例一 像素飞机
17 2
|
24天前
|
JavaScript 小程序 前端开发
微信小程序 案例二 飞机大战
微信小程序 案例二 飞机大战
37 0
微信小程序 案例二 飞机大战
|
15天前
|
小程序 搜索推荐 前端开发
短剧小程序开发案例
首先,明确你的短剧平台的目标用户群体和他们的需求。比如,年轻用户可能更倾向于轻松、幽默的短剧内容,而家庭用户则可能更偏爱教育、亲子类的短剧。了解用户需求有助于你设计更符合他们口味的功能和界面
|
29天前
|
人工智能 小程序 Python
Python编程小案例——编一个事件提醒弹窗小程序
Python编程小案例——编一个事件提醒弹窗小程序
|
4月前
|
XML Java 数据格式
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
支付系统----微信支付16----创建案例项目-引入Swagger
支付系统----微信支付16----创建案例项目-引入Swagger
支付系统---微信支付14----创建案例项目---介绍,第二步引入Swagger,接口文档和测试页面生成工具,定义统一结果的目的是让结果变得更加规范,以上就是谷粒项目的几个过程
支付系统---微信支付14----创建案例项目---介绍,第二步引入Swagger,接口文档和测试页面生成工具,定义统一结果的目的是让结果变得更加规范,以上就是谷粒项目的几个过程
|
4月前
|
小程序
【微信小程序】实战案例 -- 向订阅用户发送消息(范例:报名提醒)
【微信小程序】实战案例 -- 向订阅用户发送消息(范例:报名提醒)
242 0
|
4月前
|
小程序 Android开发 开发者
1. 建立 HBuilder 与 微信开发者的联系
1. 建立 HBuilder 与 微信开发者的联系
40 0

热门文章

最新文章