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 相关文章推荐
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
Jan 06 PHP
PHP中使用Imagick实现各种图片效果实例
Jan 21 PHP
Windows下编译PHP5.4和xdebug全记录
Apr 03 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
Mar 17 PHP
CI分页类首页、尾页不显示的解决方法
Mar 28 PHP
php通过文件头判断格式的方法
May 28 PHP
Yii2汉字转拼音类的实例代码
Apr 18 PHP
深入浅析PHP的session反序列化漏洞问题
Jun 15 PHP
PHP Trait代码复用类与多继承实现方法详解
Jun 17 PHP
PHP进阶学习之命名空间基本用法分析
Jun 18 PHP
laravel框架的安装与路由实例分析
Oct 11 PHP
laravel 执行迁移回滚示例
Oct 23 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连接access数据库
2008/03/27 PHP
php利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
Ajax+PHP实现的删除数据功能示例
2019/02/12 PHP
jquery 多级下拉菜单核心代码
2010/05/21 Javascript
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
js和jquery中获取非行间样式
2017/05/05 jQuery
jQuery pjax 应用简单示例
2018/09/20 jQuery
js中int和string数据类型互相转化实例
2019/01/16 Javascript
JavaScript之解构赋值的理解
2019/01/30 Javascript
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
优雅的使用javascript递归画一棵结构树示例代码
2019/09/22 Javascript
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
[49:31]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第二场 1月29日
2021/03/11 DOTA
python中使用sys模板和logging模块获取行号和函数名的方法
2014/04/15 Python
Python操作SQLite简明教程
2014/07/10 Python
python中getaddrinfo()基本用法实例分析
2015/06/28 Python
Python线性方程组求解运算示例
2018/01/17 Python
Python网络编程之TCP与UDP协议套接字用法示例
2018/02/02 Python
对python实现二维函数高次拟合的示例详解
2018/12/29 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
详解Django admin高级用法
2019/11/06 Python
Cython编译python为so 代码加密示例
2019/12/23 Python
matplotlib 三维图表绘制方法简介
2020/09/20 Python
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
Ajax主要包含了哪些技术
2014/06/12 面试题
生物制药专业自我鉴定
2014/02/19 职场文书
慈善捐赠倡议书
2014/08/30 职场文书
工商局调档介绍信
2015/10/22 职场文书
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫