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
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
Oct 09 PHP
谈谈新手如何学习PHP 默默经典版本
Aug 04 PHP
基于php下载文件的详解
Jun 02 PHP
php抓取页面的几种方法详解
Jun 17 PHP
删除html标签得到纯文本可处理嵌套的标签
Apr 28 PHP
php switch语句多个值匹配同一代码块应用示例
Jul 29 PHP
PHP实现在线阅读PDF文件的方法
Jun 17 PHP
PHP中error_reporting()用法详解
Aug 31 PHP
CodeIgniter针对数据库的连接、配置及使用方法
Mar 03 PHP
php中foreach结合curl实现多线程的方法分析
Sep 22 PHP
PHP面相对象中的重载与重写
Feb 13 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
Win7下手动安装apache2.2、php5.4笔记
2015/04/03 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
ExtJS 2.0实用简明教程之应用ExtJS
2009/04/29 Javascript
Javascript 文件夹选择框的两种解决方案
2009/07/01 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
Javascript vue.js表格分页,ajax异步加载数据
2016/10/24 Javascript
JS产生随机数的用法小结
2016/12/10 Javascript
javascript-解决mongoose数据查询的异步操作
2016/12/22 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
2017/02/20 Javascript
Vuejs 组件——props数据传递的实例代码
2017/03/07 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
js微信分享实现代码
2020/10/11 Javascript
关于Vue.nextTick()的正确使用方法浅析
2017/08/25 Javascript
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
python str与repr的区别
2013/03/23 Python
python之yield表达式学习
2014/09/02 Python
python根据出生日期获得年龄的方法
2015/03/31 Python
深入浅析Python中join 和 split详解(推荐)
2016/06/30 Python
Python序列化基础知识(json/pickle)
2017/10/19 Python
Python中协程用法代码详解
2018/02/10 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
对python GUI实现完美进度条的示例详解
2018/12/13 Python
Python实现从N个数中找到最大的K个数
2020/04/02 Python
欧舒丹美国官网:L’Occitane美国
2018/02/23 全球购物
为什么要使用servlet
2016/01/17 面试题
我的求职计划书
2014/01/10 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
卫生标语大全
2014/06/21 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
法人授权委托书样本
2014/09/19 职场文书
水电工程师岗位职责
2015/02/13 职场文书
深入理解python协程
2021/06/15 Python