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加密算法之实现可逆加密算法和解密分享
Jan 21 PHP
PHP四大安全策略
Mar 12 PHP
php调用google接口生成二维码示例
Apr 28 PHP
PHP定时任务延缓执行的实现
Oct 08 PHP
php中stdClass的用法分析
Feb 27 PHP
php-redis中的sort排序函数总结
Jul 08 PHP
十个PHP高级应用技巧果断收藏
Sep 25 PHP
PHP记录页面停留时间的方法
Mar 30 PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
Jul 18 PHP
PHP实现批量清空删除指定文件夹所有内容的方法
May 30 PHP
浅谈PHP中如何实现Hook机制
Nov 14 PHP
php把字符串指定字符分割成数组的方法
Mar 12 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
用session做客户验证时的注意事项
2006/10/09 PHP
php download.php实现代码 跳转到下载文件(response.redirect)
2009/08/26 PHP
基于php上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
关于PHP模板Smarty的初级使用方法以及心得分享
2013/06/21 PHP
在wamp集成环境下升级php版本(实现方法)
2013/07/01 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
Yii2 如何在modules中添加验证码的方法
2017/06/19 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
php面向对象重点知识分享
2019/09/27 PHP
JavaScript OOP面向对象介绍
2010/12/02 Javascript
jquery实现简单的无缝滚动
2015/04/15 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
js操作数组函数实例小结
2015/12/10 Javascript
jQuery实现拖动剪裁图片作为头像
2016/12/28 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
Bootstrap一款超好用的前端框架
2017/09/25 Javascript
vue-cli启动本地服务局域网不能访问的原因分析
2018/01/22 Javascript
Angular4 Select选择改变事件的方法
2018/10/09 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
2019/09/20 Javascript
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
谈谈python中GUI的选择
2018/03/01 Python
浅谈python标准库--functools.partial
2019/03/13 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
Python3 mmap内存映射文件示例解析
2020/03/23 Python
Pytest框架之fixture的详细使用教程
2020/04/07 Python
通过cmd进入python的步骤
2020/06/16 Python
Python如何读取、写入JSON数据
2020/07/28 Python
美国最大的网上冲印店:Shutterfly
2017/01/01 全球购物
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
美国最大的旗帜经销商:Carrot-Top
2018/02/26 全球购物
夏季奶茶店创业计划书
2014/01/16 职场文书
个人简历中的自我评价怎么写
2014/01/26 职场文书
聚美优品广告词改编
2014/03/14 职场文书
2015暑期爱心支教策划书
2015/07/14 职场文书
浅谈Node的内存泄露问题
2022/05/06 NodeJs