设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间01 现在时间01 缓存数据 你是我生命中所能经历的,最最深切的感觉。

你是我生命中所能经历的,最最深切的感觉。

查看: 740|回复: 2

thinkphp5 框架结合plupload实现图片批量上传功能示例

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:221
  • 打卡月天数:0
  • 打卡总奖励:3221
  • 最近打卡:2025-04-16 21:39:29
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
411
主题
370
精华
0
金钱
4453
积分
834
注册时间
2023-1-9
最后登录
2025-5-31

发表于 2023-2-12 22:06:51 | 显示全部楼层 |阅读模式
本文实例讲述了thinkphp5 框架结合plupload实现图片批量上传功能。分享给大家供大家参考,具体如下:
在extend目录下新增目录uploader,并新建类Uploads
  1. <?php
  2. namespace uploader;

  3. class Uploads {
  4. public static function upfile($file, $path = 'images', $add_domain = false) {
  5.   $res = ['errno' => 1, 'errmsg' => '上传图片错误'];
  6.   $data = '';
  7.   if(!empty($file)) {
  8.    // 上传根目录
  9.    $file_path = 'uploads/';
  10.    // 如果传了路径过来,则加入路径
  11.    if(!empty($path)) {
  12.     $file_path .= $path .'/';
  13.    }
  14.    if (!file_exists($file_path)) {
  15.     @mkdir($file_path);
  16.    }
  17.    // 上传
  18.    $info = $file->move($file_path);
  19.    // 获取后缀
  20.    $ext = strtolower($info->getExtension());
  21.    //判断后缀是否合法
  22.    $exts = ['jpg', 'png', 'gif', 'jpeg', 'mp4', 'avi', '3gp'];
  23.    if(in_array($ext, $exts)) {
  24.     $save_name = $info->getSaveName();
  25.     $save_path = "/" . $file_path . $save_name;
  26.     if($add_domain) {
  27.      $save_path = "http://www.localhost.com/" . $file_path . $save_name;
  28.     }
  29.     $res = ['errno' => 0, 'data' => $save_path];
  30.    } else {
  31.     $res = ['errno' => 1, 'errmsg' => $ext];
  32.    }
  33.   } else {
  34.    $res = ['errno' => 1, 'errmsg' => '请选择图片!'];
  35.   }
  36.   
  37.   return $res;
  38. }
  39. }
  40. ?>
复制代码
使用
  1. <?php

  2. namespace app\backend\controller;

  3. use think\Controller;
  4. use think\Request;
  5. use uploader\Uploads;

  6. class Upload extends Controller
  7. {
  8. public function upload(Request $request) {
  9.   $files = $request->file("file");
  10.   $updir = $request->post('updir');
  11.   $res = Uploads::upfile($files, $updir);
  12.   return json_encode($res);
  13. }

  14. public function del_upload(Request $request) {
  15.   $res = ['errno' => 1, 'errmsg' => '删除失败'];
  16.   $filename = $request->post('filename');
  17.   if(!empty($filename)) {
  18.    @unlink($_SERVER['DOCUMENT_ROOT'] . $filename);
  19.    $res = ['errno' => 0, 'errmsg' => $filename];
  20.   }
  21.   return json_encode($res);
  22. }

  23. }

  24. ?>
复制代码
前端js
  1. var image_files = new Array(); // 多图片上传临时保存
  2. $(document).ready(function() {
  3. $('.media-picker').each(function() {
  4.   var el = $(this);
  5.   var elbtn = el.find('.media-picker-button');
  6.   var multi_selection = false;
  7.   var inputField = el.find('input[type=hidden]');
  8.   // 是否多文件上传
  9.   if(elbtn.attr('data-multiple') == 'multiple') {
  10.    multi_selection = true;
  11.   }
  12.   // 上传目录
  13.   var upload_path = inputField.attr('upload-path');
  14.   var uploader = new plupload.Uploader({
  15.    runtimes : 'html5,flash,silverlight,html4',
  16.    browse_button : elbtn.attr('data-id') + '_uploader',
  17.    multi_selection: multi_selection,
  18.    auto_start: true,
  19.    flash_swf_url : '../plugins/plupload/js/Moxie.swf',
  20.    silverlight_xap_url : '../plugins/plupload/js/Moxie.xap',
  21.    url : '/backend/upload',
  22.    
  23.    filters: {
  24.     mime_types : [ //只允许上传图片和zip,rar文件
  25.     { title : "Image files", extensions : "jpg,jpeg,gif,png,bmp" },
  26.     { title : "Video files", extensions : "mp4,3gp" }
  27.     ],
  28.     max_file_size : '10mb', //最大只能上传10mb的文件
  29.     prevent_duplicates : false //不允许选取重复文件
  30.    },

  31.    init: {
  32.     PostInit: function() {},

  33.     BeforeUpload: function(up, file) {
  34.      up.setOption('multipart_params', {'updir': upload_path})
  35.     },

  36.     FilesAdded: function(up) {
  37.      up.start(); //选择完后直接上传
  38.     },

  39.     FileUploaded: function(up, file, info) {
  40.      if (info.status == 200)
  41.      {
  42.       var file_type = file.type;
  43.       var is_image = file_type.indexOf('image');
  44.       var is_video = file_type.indexOf('video');
  45.       // 解析返回的数据
  46.       var result = JSON.parse(info.response);
  47.       var img_list = "";
  48.       if(result.errno == 0) {
  49.        // 返回的图片上传结果
  50.        var file_name = result.data;
  51.        if(multi_selection) {
  52.         // 多图片上传不考虑视频
  53.         if (is_image > -1) {
  54.          // 存入临时数组
  55.          image_files.push(file_name);
  56.          inputField.val(JSON.stringify(image_files));
  57.          for (var i = 0; i < image_files.length; i++) {
  58.           img_list += "<li><img src='"+image_files[i]+"' /><span class='delete-image'>✖</span><p>"+image_files[i]+"</p></li>";
  59.          }
  60.         }
  61.        } else {
  62.         inputField.val(file_name);
  63.         if (is_image > -1) {
  64.          img_list = "<li><img src='"+result.data+"' /><span class='delete-image'>✖</span><p>"+result.data+"</p></li>";
  65.         }
  66.         if (is_video > -1) {
  67.          img_list = "<li><video controls src='"+result.data+"'></video><span class='delete-image'>✖</span><p>"+result.data+"<p></li>";
  68.         }
  69.        }
  70.        el.find('.image-list').html(img_list);
  71.       } else {
  72.        alert(result.errmsg);
  73.       }
  74.      }
  75.      else
  76.      {
  77.       alter(info.response);
  78.      }
  79.     },

  80.     Error: function(up, err) {
  81.      alert(err.response);
  82.     }
  83.    }
  84.   })
  85.   uploader.init();


  86.   // 删除
  87.   if (multi_selection) {
  88.    el.on('click', '.delete-image', function() {
  89.     var file_name = inputField.val();
  90.     var elDel = $(this);
  91.     // 得到filename
  92.     var current_file_name = elDel.next('p').html();
  93.     // 删除当前的父级li
  94.     elDel.parent().remove();
  95.     // 重新赋值数组
  96.     var new_image_files = new Array();
  97.     if (image_files != '') {
  98.      new_image_files = image_files;
  99.     } else {
  100.      new_image_files = $.parseJSON(file_name);
  101.     }
  102.     // 去掉数组中的当前值
  103.     for(var i in new_image_files) {
  104.      if(new_image_files[i] == current_file_name) {
  105.       new_image_files.splice(i,1);
  106.       break;
  107.      }
  108.     }
  109.     $.ajax({
  110.       type: "POST",
  111.       url: "/backend/del_upload",
  112.       data: "filename=" + current_file_name,
  113.       success: function(msg) {
  114.         console.log(msg)
  115.       }
  116.     });
  117.     inputField.val(JSON.stringify(new_image_files));
  118.    });
  119.   } else {
  120.    el.on('click', '.delete-image', function(){
  121.     // 显示值为空
  122.     var file_name = inputField.val();
  123.     el.find('.image-list').html('');
  124.     inputField.val('');
  125.     $.ajax({
  126.      type: "POST",
  127.      url: "/backend/del_upload",
  128.      data: "filename=" + file_name,
  129.      success: function(msg) {
  130.        console.log(msg)
  131.      }
  132.     });
  133.    });
  134.   }
  135. })
  136. })
复制代码
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

  • 打卡等级:无名新人
  • 打卡总天数:1
  • 打卡月天数:0
  • 打卡总奖励:8
  • 最近打卡:2024-02-22 01:04:35
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
21
积分
6
注册时间
2023-10-31
最后登录
2024-2-22

发表于 2024-9-29 20:19:19 | 显示全部楼层
感谢楼主,顶。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
18
积分
16
注册时间
2022-12-26
最后登录
2022-12-26

发表于 2025-3-20 17:39:59 | 显示全部楼层
感谢楼主分享。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表