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连接access数据库
Mar 27 PHP
并发下常见的加锁及锁的PHP具体实现代码
Oct 12 PHP
php像数组一样存取和修改字符串字符
Mar 21 PHP
ThinkPHP视图查询详解
Jun 30 PHP
ci检测是ajax还是页面post提交数据的方法
Nov 10 PHP
PHP中使用Imagick实现各种图片效果实例
Jan 21 PHP
PHP检测用户语言的方法
Jun 15 PHP
非常重要的php正则表达式详解
Jan 04 PHP
PHP生成短网址方法汇总
Jul 12 PHP
PHP中数组转换为SimpleXML教程
Jan 27 PHP
使用PHPWord生成word文档的方法详解
Jun 06 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
Aug 09 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
一个简易需要注册的留言版程序
2006/10/09 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
php面向对象程序设计入门教程
2019/06/22 PHP
Javascript操纵Cookie实现购物车程序
2007/02/15 Javascript
基于jQuery的自动完成插件
2011/02/03 Javascript
jquery中dom操作和事件的实例学习-表单验证
2011/11/30 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
2013/01/03 Javascript
简单易用的倒计时js代码
2014/08/04 Javascript
JavaScript中判断原生函数检查function是否是原生代码
2014/09/09 Javascript
Jquery全选与反选点击执行一次的解决方案
2015/08/14 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
Bootstrap实现水平排列的表单
2016/07/04 Javascript
关于Jquery中的bind(),on()绑定事件方式总结
2016/10/26 Javascript
详解js中call与apply关键字的作用
2016/11/21 Javascript
Three.js加载外部模型的教程详解
2017/11/10 Javascript
AngularJS中的作用域实例分析
2018/05/16 Javascript
CKEditor4配置与开发详细中文说明文档
2018/10/08 Javascript
vue实现微信二次分享以及自定义分享的示例
2019/03/20 Javascript
微信小程序云开发修改云数据库中的数据方法
2019/05/18 Javascript
angular共享依赖的解决方案分享
2020/10/15 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
python迭代器的使用方法实例
2013/11/21 Python
python实现倒计时的示例
2014/02/14 Python
Python实现的简单计算器功能详解
2018/08/25 Python
详解Python Matplot中文显示完美解决方案
2019/03/07 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
2019/06/12 Python
python numpy中cumsum的用法详解
2019/10/17 Python
Python利用matplotlib绘制约数个数统计图示例
2019/11/26 Python
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
加拿大在线隐形眼镜和眼镜店:VisionPros
2019/10/06 全球购物
交通事故私了协议书
2014/04/16 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
入党政审材料范文
2014/12/24 职场文书
基层党建工作简报
2015/07/21 职场文书
Python+Tkinter制作专属图形化界面
2022/04/01 Python