zoukankan      html  css  js  c++  java
  • 小程序多图上传并压缩,带预览删除功能

    <view class="upload_view">
      <block wx:for="{{pics}}" wx:key="*this">     <view class="q_image_wrap">       <!-- 图片缩略图 -->       <image class="q_image" src="{{item}}" mode="aspectFill" data-idx="{{index}}" bindtap="handleImagePreview"></image>       <!-- 移除图片的按钮 -->       <view class="q_image_remover" data-idx="{{index}}" bindtap="removeImage">         <i-icon type="close" size="14" class="icon" />       </view>     </view>
      </block>   <view class='uploadImg_btn' bindtap="chooseImage" wx:if="{{pics.length < 9}}">     <image src="../../img/upload.png"></image>   </view> </view>
     //选择图片
        chooseImage(e) {
            console.log(e)
            var that = this;
            var pics = this.data.pics;
            //---------------------多张上传----------------------------------------------------------------------------------------
            wx.chooseImage({
                count: 9 - pics.length, // 最多可以选择的图片张数,默认9
                sizeType: ['original', 'compressed'], // original 原图,compressed 压缩图,默认二者都有
                sourceType: ['album', 'camera'], // album 从相册选图,camera 使用相机,默认二者都有
                success: function (photo) {
                    //图片大小,限制10M以内
                    for (var i = 0; i < photo.tempFiles.length; i++) {
                        if (photo.tempFiles[i].size >= 10 * 1024 * 1024) {
                            console.log('请上传10M以内的图片');
                            return;
                        }
                    }
                    var imgsrc = photo.tempFilePaths;
                    //页面上展示的是原图片========pics数组
                    pics = pics.concat(imgsrc);
                    that.setData({
                        pics: pics
                    });
                    console.log(that.data.pics)
                    that.getCanvasImg(0, 0, photo.tempFilePaths);  //进行压缩
                },
                fail: function () {
                    // fail
                },
                complete: function () {
                    // complete
                }
            })
        },
     //压缩并获取图片,这里用了递归的方法来解决canvas的draw方法延时的问题
        getCanvasImg: function (index, failNum, tempFilePaths) {
            var that = this;
            let imagesPress = that.data.imagesPress;
            if (index < tempFilePaths.length) {
                wx.getImageInfo({
                    src: tempFilePaths[index],
                    success: function (res) {
                        //---------利用canvas压缩图片--------------
                        var ratio = 2;
                        var canvasWidth = res.width //图片原始长宽
                        var canvasHeight = res.height
                        while (canvasWidth > 400 || canvasHeight > 400) {// 保证宽高在400以内
                            canvasWidth = Math.trunc(res.width / ratio)
                            canvasHeight = Math.trunc(res.height / ratio)
                            ratio++;
                        }
                        that.setData({
                            canvasWidth: canvasWidth,
                            canvasHeight: canvasHeight,
                        })
                        const ctx = wx.createCanvasContext('photo_canvas');
                        ctx.drawImage(tempFilePaths[index], 0, 0, canvasWidth, canvasHeight);
                        ctx.draw(false, function () {
                            index = index + 1;//上传成功的数量,上传成功则加1
                            wx.canvasToTempFilePath({
                                canvasId: 'photo_canvas',
                                success: function success(res) {
                                    console.log('最终图片路径' + res.tempFilePath)//最终图片路径
                                    imagesPress.push(res.tempFilePath);
                                    console.log(that.data.imagesPress)
                                    that.setData({
                                        imagesPress: imagesPress
                                    })
                                    that.uploadCanvasImg(res.tempFilePath);
                                    that.getCanvasImg(index, failNum, tempFilePaths);
                                }, fail: function (e) {
                                    failNum += 1;//失败数量,可以用来提示用户
                                    that.getCanvasImg(inedx, failNum, tempFilePaths);
                                }
                            });
                        });
                    }
                })
    
            }
        },
    //上传图片
        uploadCanvasImg: function (canvasImg) {
            const {$Toast} = require('../../dist/base/index');
            var that = this;
            let attachmentId = that.data.attachmentId
            var tempImg = canvasImg;
            wx.showLoading({
                title: '上传中...',
            });
            wx.uploadFile({
                url: app.globalData.baseUrl + '/api/upload',//文件服务器的地址
                filePath: tempImg,
                header: {
                    'Content-type': 'multipart/form-data',
                    'token': wx.getStorageSync('token')
                },
                // formData: {
                // },
                name: 'file',
                success: function (res) {
                    wx.hideLoading()
                    $Toast({
                        content: '上传成功!'
                    });
                    console.log(res)
                }
            })
        },
    //删除图片
        removeImage(e) {
            var that = this;
            var pics = that.data.pics;
            var imagesPress = that.data.imagesPress;
            // 获取要删除的第几张图片的下标
            const idx = e.currentTarget.dataset.idx
            // splice  第一个参数是下表值  第二个参数是删除的数量
            pics.splice(idx, 1)
            imagesPress.splice(idx, 1)
            this.setData({
                pics: pics,
                imagesPress: imagesPress
            })
            console.log(that.data.imagesPress)
        },
        //预览图片
        handleImagePreview(e) {
            const idx = e.target.dataset.idx
            const pics = this.data.pics
            wx.previewImage({
                current: pics[idx],  //当前预览的图片
                urls: pics,  //所有要预览的图片
            })
        },
  • 相关阅读:
    Meterpreter核心命令
    bugku ctf 杂项 旋转跳跃 (熟悉的声音中貌似又隐藏着啥,key:syclovergeek)
    bugku 神秘的文件
    代码审计
    “百度杯”CTF比赛 九月场 类型:Web 题目名称:SQLi ---不需要逗号的注入技巧
    热烈祝贺北亚获批电子数据司法鉴定执业资格!
    硬盘有坏道的表现和避免硬盘坏道的方法
    如何应对eva存储崩溃的情况?
    linux系统数据恢复过程
    DELL EqualLogic PS6100恢复数据原理概述
  • 原文地址:https://www.cnblogs.com/lhy-555/p/11023210.html
Copyright © 2011-2022 走看看