小程序 图片上传 及后台PHP接收文件

10 篇文章 0 订阅

相关连接:

https://developers.weixin.qq.com/miniprogram/dev/api/wx.chooseImage.html

https://developers.weixin.qq.com/miniprogram/dev/api/wx.uploadFile.html

前台代码wxml:

<view bindtap="shopLogoChange">空白处上传</view>
///api.js
/**
 * 图片上传
 * @param method
 * @param params
 * @param name $_FILES['name']
 * @param filePath 临时文件
 * @returns {Promise}
 */
function uploadFile(method, params, name, filePath) {
    wx.showLoading({title: '加载中'});
    return new Promise(function (resolve, reject) {
        params.method = method;
        params.api = config.apiId;
        params.time = parseInt((new Date()).getTime() / 1000);
        let session = getSession();
        if(session) {
            params.session = session;
        }
        // console.log(params);
        wx.uploadFile({
            filePath: filePath,
            name: name,
            formData: params,
            url: config.apiUrl,
            header: {
                'app-version': config.version,
                'app-key': generateKey(params)
            },
            success: res => {
                // console.log(JSON.parse(res.data));
                if (res.statusCode == 200) {
                    resolve(JSON.parse(res.data));
                } else {
                    reject(res.errMsg);
                }
            },
            fail: err => {
                reject(err);
            },
            complete: data => {
                wx.hideLoading();
            }
        });
    });
}
//js
const api = require("../../utils/api.js");
Page({
    uploadFile : function () {
        let that = this;
        wx.chooseImage({
            count : 1,
            success : res => {
                let tempFilePaths = res.tempFilePaths[0];
                that.setData({
                    'image' : tempFilePaths,
                });
                api.uploadFile('system.uploadImage', {type : 'shop'}, 'image', tempFilePaths).then(res => {
                    console.log('上传图片');
                    console.log(res);
                    if(res.code != 1) {
                        wx.showToast({
                            title : res.message,
                            icon : 'none',
                            duration : 2000,
                        });
                        return false;
                    }
                    that.setData({
                        'image' : res.data.imageUrl,
                    });
                    //数据保存操作
                });
            },
            fail : resError => {
                console.log('选择图片错误:');
                console.log(resError);
            },
        });
    },
});

PHP相关api:

/**
 * system.uploadImage
 * 上传图片操作
 */
public function uploadImage()
{
    $image = UploadedFile::getInstanceByName('image');//相当于$_FILES['image']
    if($image && $image->tempName) {
        $filename = date('YmdHis') . rand(100,999) . '.' . $image->getExtension();
        $path = 'images/';
        $file = Yii::getAlias('@uploadPath/' . $path);
        if(!file_exists($file)) {
            mkdir($file, 0777, true);
        }
        //将微信传的临时文件移动到server的指定位置
        if(move_uploaded_file($image->tempName, $file . $filename)) {
            return ['code'=>Api::CODE_SUCCESS, 'message'=>'图片上传成功', 'data'=>[
                'image' => $path . $filename,
                'imageUrl' => Yii::getAlias('@uploadUrl/' . $path . $filename)
            ]];
        }
        return ['code'=>Api::CODE_FAIL, 'message'=>'图片上传失败'];
    }
    return ['code'=>Api::CODE_FAIL, 'message'=>'图片上传失败'];
}

 

小程序多张图片上传:原理就是用递归的方法,在每一张上传完之后再继续上传下一张,直到完成为止。

data: {
    images : [],//图片列表
},
//上传操作
uploadImages : function() {
    let that = this;
    let param = {};
    wx.chooseImage({
        sizeType:['compressed'],
        success(res) {
            const tempFilePaths = res.tempFilePaths;
            let i = 0;
            let uploadFile = function(i) {
                api.uploadFile('system.uploadImage', param, 'image', tempFilePaths[i]).then(function(res){
                    if(res.code == 1) {
                        let image = {
                            imageUrl : res.data.imageUrl,
                            imagePath : res.data.image,
                        };
                        let imagesObj = that.data.images;
                        imagesObj.push(image);
                        that.setData({
                            images : imagesObj,
                        });
                    }
                    if(i < (tempFilePaths.length-1)) {
                        i++;
                        uploadFile(i);
                    }
                }, function(err){});
            };
            uploadFile(i);
        }
    });
}

//保存操作
saveProfile : function (e) {
    let _that = this;
    console.log(_that.data.images);
},

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值