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 相关文章推荐
PHP中的串行化变量和序列化对象
Sep 05 PHP
PHP数据库操作面向对象的优点
Oct 09 PHP
在MongoDB中模拟Auto Increment的php代码
Mar 06 PHP
解析如何修改phpmyadmin中的默认登陆超时时间
Jun 25 PHP
ueditor 1.2.6 使用方法说明
Jul 24 PHP
解密ThinkPHP3.1.2版本之模板继承
Jun 19 PHP
隐性调用php程序的方法
Jun 13 PHP
WordPress中访客登陆实现邮件提醒的PHP脚本实例分享
Dec 14 PHP
php支付宝在线支付接口开发教程
Sep 19 PHP
php array_pop 删除数组最后一个元素实例
Nov 02 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
Nov 22 PHP
PHP基于新浪IP库获取IP详细地址的方法
May 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操作xml代码
2010/06/17 PHP
关于PHP内存溢出问题的解决方法
2013/06/25 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
Node.js的特点和应用场景介绍
2014/11/04 Javascript
JavaScript插件化开发教程 (一)
2015/01/27 Javascript
javascript数组去重的方法汇总
2015/04/14 Javascript
js实现select二级联动下拉菜单
2020/04/17 Javascript
JS 实现 ajax 异步浏览器兼容问题
2017/01/21 Javascript
JavaScript自定义文本框光标
2017/03/05 Javascript
关于laydate.js加载laydate.css路径错误问题解决
2017/12/27 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
2018/11/10 Javascript
详解javascript 变量提升(Hoisting)
2019/03/12 Javascript
小程序绑定用户方案优化小结
2019/05/15 Javascript
微信小程序中使用 async/await的方法实例分析
2020/05/06 Javascript
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python合并字符串的3种方法
2015/05/21 Python
python读取目录下最新的文件夹方法
2018/12/24 Python
python 限制函数执行时间,自己实现timeout的实例
2019/01/12 Python
python重试装饰器的简单实现方法
2019/01/31 Python
对python 通过ssh访问数据库的实例详解
2019/02/19 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
2019/02/26 Python
Python 给屏幕打印信息加上颜色的实现方法
2019/04/24 Python
Python生成MD5值的两种方法实例分析
2019/04/26 Python
python django model联合主键的例子
2019/08/06 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
为什么说Python可以实现所有的算法
2019/10/04 Python
python实现根据文件格式分类
2019/10/31 Python
利用css3如何设置没有上下边的列表间隔线
2017/07/03 HTML / CSS
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
Footshop乌克兰:运动鞋的最大选择
2019/12/01 全球购物
农村党员一句话承诺
2014/05/30 职场文书
小区推广策划方案
2014/06/06 职场文书
2015年暑假生活总结
2015/07/13 职场文书
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python