tp5实现微信小程序多图片上传到服务器功能


Posted in PHP onJuly 16, 2018

最近在做一个教育类的小商城的微信小程序,用到了上传多个图片文件到服务器端,这里做一个讲解,希望对大家有所帮助。

1,小程序端:

在wxml文件中:

<!--选择图片 -->
<view class="picture">
<view class="img" wx:for="{{imgs}}" wx:for-item="item" wx:key="*this">
<image class='imgSelected' src="{{item}}" data-index="{{index}}" mode="aspectFill" bindtap="previewImg"></image>
<view class="delete-btn" data-index="{{index}}" catchtap="deleteImg">删除</view>
</view>
<view class="clickImg" bindtap="chooseImg">点击上传作业</view>
</view>
<!-- 选择图片end -->

在js文件中:

Page({
/**
 * 页面的初始数据
*/
data: {
 index: 0,
 multiIndex: [0, 0],
//传到后台的课程分类
cname:'',
 },
/**
 * 生命周期函数--监听页面加载
*/
onLoad: function (options) {
 },
/**
 * 
 * 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
 },
/**
 * 生命周期函数--监听页面显示
*/
onShow: function () {
 },
/**
 * 生命周期函数--监听页面隐藏
*/
onHide: function () {
 },
/**
 * 生命周期函数--监听页面卸载
*/
onUnload: function () {
 },
/**
 * 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
 },
/**
 * 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
 },
/**
 * 用户点击右上角分享
*/
onShareAppMessage: function () {
 },
// 上传图片操作
// 上传图片
chooseImg: function (e) {
var that = this;
if(that.data.cname==''){
 }else{
var imgs = this.data.imgs;
if (imgs.length >= 9) {
this.setData({
 lenMore: 1
 });
 setTimeout(function () {
 that.setData({
 lenMore: 0
 });
 }, 2500);
return false;
 }
 wx.chooseImage({
// count: 1, // 默认9
 sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
success: function (res) {
// 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
var tempFilePaths = res.tempFilePaths;
var imgs = that.data.imgs;
// console.log(tempFilePaths + '----');
for (var i = 0; i < tempFilePaths.length; i++) {
if (imgs.length >= 9) {
 that.setData({
 imgs: imgs
 });
return false;
 } else {
 imgs.push(tempFilePaths[i]);
 }
 }
// console.log(imgs);
 that.setData({
 imgs: imgs,
 });
//循环把图片上传到服务器
for (var i = 0; i < imgs.length; i++) {
 wx.uploadFile({
 url: url + 'Wx_SaveHomeWork',
 filePath: imgs[i],
 name: 'files',
 formData: {
 cname: that.data.cname
 },
 success: function (res) {
 console.log(res)
 }
 })
 }
 }
 });
 }
 },
// 删除图片
deleteImg: function (e) {
var imgs = this.data.imgs;
var index = e.currentTarget.dataset.index;
 imgs.splice(index, 1);
this.setData({
 imgs: imgs
 });
 },
// 预览图片
previewImg: function (e) {
//获取当前图片的下标
var index = e.currentTarget.dataset.index;
//所有图片
var imgs = this.data.imgs;
 wx.previewImage({
//当前显示图片
current: imgs[index],
//所有图片
urls: imgs
 })
 },
})

2,我们注意到我的wx.request请求中Wx_SaveHomeWork方法是后台服务器的接收图片方法,

后边我会把这个方法展示出来,

3.tp5后台controller中:

//存取学生作业信息
  public function Wx_SaveHomeWork(){
    $files=\request()->file('files');
    $cname=\request()->param('cname');
    $cid=Db::name('course')->where('cname',$cname)->value('id');
    $max_id=Db::name('homework')->max('id');
    foreach($files as $item){
// 移动到框架应用根目录/public/uploads/ 目录下
      $info = $files->rule('date')->move(ROOT_PATH . 'public' . DS . 'uploads');
      if($info){
        $saveName=str_replace("\\","/",$info->getSaveName());
        $img='/uploads/'.$saveName;
        $homework[]=['id'=>$max_id+1,'img'=>$img,'cid'=>$cid];
      }
    }
    //把数据插入到作业表中
    \db('homework')->insertAll($homework);
  }

这里说一下,max_id的作用,因为接受的是多张图片,相当于一次性要存储多条数据,所以用max_id对id进行自增,存储到数据库表,cid是我自己数据库逻辑需要用到的变量,可以不用考虑,

4.讲解的不够清楚,因为是自己写的,感受不到难点在哪里,我自己的难点是在小程序端的图片上传,用了for循环,循环上传的方法,其他的相对来说,逻辑比较简单。

总结

以上所述是小编给大家介绍的tp5实现微信小程序多图片上传到服务器功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
一个域名查询的程序
Oct 09 PHP
php设计模式 Facade(外观模式)
Jun 26 PHP
PHP实现手机归属地查询API接口实现代码
Aug 27 PHP
PHP的简易冒泡法代码分享
Aug 28 PHP
模板引擎smarty工作原理以及使用示例
May 25 PHP
PHP自带函数给数字或字符串自动补齐位数
Jul 29 PHP
PHP中数据类型转换的三种方式
Apr 02 PHP
PHP检测用户语言的方法
Jun 15 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
Oct 20 PHP
php中序列化与反序列化详解
Feb 13 PHP
PHP异常处理定义与使用方法分析
Jul 25 PHP
JS操作XML中DTD介绍及使用方法分析
Jul 04 PHP
PHP 爬取网页的主要方法
Jul 13 #PHP
php实现微信发红包功能
Jul 13 #PHP
Yii2框架redis基本应用示例
Jul 13 #PHP
Yii2框架实现登陆添加验证码功能示例
Jul 12 #PHP
Yii框架日志记录Logging操作示例
Jul 12 #PHP
php unlink()函数使用教程
Jul 12 #PHP
总结PHP代码规范、流程规范、git规范
Jun 18 #PHP
You might like
开发大型PHP项目的方法
2006/10/09 PHP
php 301转向实现代码
2008/09/18 PHP
Yii操作数据库的3种方法
2014/03/11 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
网页开发中的容易忽略的问题 javascript HTML中的table
2009/04/15 Javascript
一个简单的javascript类定义例子
2009/09/12 Javascript
测试你的JS的掌握程度的代码
2009/12/09 Javascript
js下通过prototype扩展实现indexOf的代码
2010/12/08 Javascript
js左侧三级菜单导航实例代码
2013/09/13 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
2013/11/28 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
2013/12/12 Javascript
jquery实现清新实用的网页菜单效果
2015/08/28 Javascript
JavaScript动态创建div等元素实例讲解
2016/01/06 Javascript
JS组件系列之Bootstrap Icon图标选择组件
2016/01/28 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
小程序登录态管理的方法示例
2018/11/13 Javascript
Vue使用mixin分发组件的可复用功能
2019/09/01 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
Python set集合类型操作总结
2014/11/07 Python
Python生成随机MAC地址
2015/03/10 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
详解 Python 读写XML文件的实例
2017/08/02 Python
Python中Threading用法详解
2017/12/27 Python
会计工作心得体会
2014/01/13 职场文书
数学系个人求职信范文
2014/01/30 职场文书
医学生求职信
2014/07/01 职场文书
小学新教师个人总结
2015/02/05 职场文书
2015年大班保育员工作总结
2015/05/18 职场文书
整脏治乱工作简报
2015/07/21 职场文书
公司员工离职感言
2015/08/03 职场文书
银行大堂经理培训心得体会
2016/01/09 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python