Thinkphp5+uploadify实现的文件上传功能示例


Posted in PHP onMay 26, 2018

本文实例讲述了Thinkphp5+uploadify实现的文件上传功能。分享给大家供大家参考,具体如下:

初次接触服务器端开发,边学习边试着做一个OTA后台服务器,费了好大劲才实现了文件上传和进度条显示。

遇到几个问题:

1. 大文件上传失败
2.上传取消X 符合显示不出来
3. 不知道如何传递变量值给后台php

记录下过程:

1. 下载uploadify 代码到工程里,如public\plug-ins\uploadify 下。
2. 前端脚本如下,

客户端在formData 中传递版本号,请看version_id 赋值方法,需要先在控制器里给它assign。

取消符合显示不了,需要修改uploadify.css 里面的background: url('uploadify-cancel.png')

注意uploadify 中uploader的写法

<form enctype="multipart/form-data" method="post" >
  <input type="file" name="uploadify" id="uploadify" multiple="true" />
</form>
<script type="text/javascript">
  <?php $timestamp = time();?>
  var maxSize = 1024 * 1024*1024;//1G
  $(function() {
    $('#uploadify').uploadify({
      'debug'  : false,
      <span style="white-space:pre">   </span> 'fileSizeLimit ': maxSize,
      'formData'   : {
        'timestamp' : '<?php echo $timestamp;?>',
        'token'   : '<?php echo md5('unique_salt' . $timestamp);?>',
        <span style="white-space:pre">    </span>'version_id': "{$version_id}"
      },
      'swf'   : '/public/plug-ins/uploadify/uploadify.swf',
      <span style="white-space:pre">    </span>'cancelImg':'/public/plug-ins/uploadify/uploadify-cancel.png',
      'uploader' : '{:url("Package/upload")}',
      <span style="white-space:pre">    </span>'fileTypeDesc'  : 'zip文件',
      <span style="white-space:pre">    </span>'fileTypeExts' : '*.zip',
      <span style="white-space:pre">   </span> 'multi': false
    });
  });
</script>

3. 后端脚本对应控制器 Package 的upload函数

注意上传文件的获取方法,不能使用Thinkphp5 官方文档那种获取方式。

保存文件名不能带特殊符号

修改php.ini: upload_max_filesize = 1024M  post_max_size=48 重启服务

public function upload(){
  $verifyToken = md5('unique_salt' . $_POST['timestamp']);
  if (!empty($_FILES) && $_POST['token'] == $verifyToken) {
  $tempFile = $_FILES['Filedata']['tmp_name'];
    /*
    $targetFolder = '/public/uploads'; // Relative to the root
  $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
  $targetFile = rtrim($targetPath,'/') . '/' . $_FILES['Filedata']['name'];
  // Validate the file type
  $fileTypes = array('jpg','jpeg','gif','png','zip'); // File extensions
  $fileParts = pathinfo($_FILES['Filedata']['name']);
  if (in_array($fileParts['extension'],$fileTypes)) {
    move_uploaded_file($tempFile,$targetFile);
    echo '1';
  } else {
    echo 'Invalid file type.';
  }*/
    $version = model("Version")->retrieve_by_version($_POST['version_id']);
    if($version){
      $file = new File($tempFile,'rw');
      $hash_code = $file->hash();
      $time = date("Y-m-d-i-s",$_POST['timestamp']);
      $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads'.DS.$version['project_name'].DS.$version['version_name'],'update_'.$time.'.zip');
      if($info){
        // 成功上传后 获取上传信息
        echo $info->getExtension();
        echo $info->getSaveName();
        echo $info->getFilename();
      }else{
        // 上传失败获取错误信息
        echo $file->getError();
      }
    }else{
      echo '找不到对应版本';
    }
  }
}

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
网站当前的在线人数
Oct 09 PHP
PHP 超链接 抓取实现代码
Jun 29 PHP
PHP 数组遍历顺序理解
Sep 09 PHP
提高PHP编程效率 引入缓存机制提升性能
Feb 15 PHP
php下正则来匹配dede模板标签的代码
Aug 21 PHP
php页面缓存ob系列函数介绍
Oct 18 PHP
探讨php define()函数及defined()函数使用详解
Jun 09 PHP
PHP实现简单数字分页效果
Jul 26 PHP
微信利用PHP创建自定义菜单的方法
Aug 01 PHP
PHP后期静态绑定实例浅析
Dec 21 PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 28 PHP
浅谈如何提高PHP代码的质量
May 28 PHP
PHP ADODB实现事务处理功能示例
May 25 #PHP
PHP ADODB实现分页功能简单示例
May 25 #PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
May 25 #PHP
php7函数,声明,返回值等新特性介绍
May 25 #PHP
php框架CodeIgniter主从数据库配置方法分析
May 25 #PHP
CodeIgniter框架数据库基本操作示例
May 24 #PHP
PHP实现生成数据字典功能示例
May 24 #PHP
You might like
基于mysql的bbs设计(五)
2006/10/09 PHP
PHP7常量数组用法分析
2016/09/26 PHP
如何实现JS函数的重载
2006/09/22 Javascript
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
JS无限树状列表实现代码
2011/01/11 Javascript
js中 关于undefined和null的区别介绍
2013/04/16 Javascript
jquery.validate的使用说明介绍
2013/11/12 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
在线所见即所得HTML编辑器的实现原理浅析
2015/04/25 Javascript
jquery控制页面部分刷新的方法
2015/06/24 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
关于javascript获取内联样式与嵌入式样式的实例
2017/06/01 Javascript
详解React 在服务端渲染的实现
2017/11/16 Javascript
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
2018/11/01 NodeJs
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
基于vue-cli3创建libs库的实现方法
2019/12/04 Javascript
[01:07:53]RNG vs VG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python机器学习logistic回归代码解析
2018/01/17 Python
Python多线程同步---文件读写控制方法
2019/02/12 Python
Python编写合并字典并实现敏感目录的小脚本
2019/02/26 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
详解Python IO编程
2020/07/24 Python
HTML5实现无刷新修改URL的方法
2019/11/14 HTML / CSS
程序员跳槽必看面试题总结
2013/06/28 面试题
J2EE系统只能是基于web
2015/09/08 面试题
办公室文员工作自我评价
2013/12/01 职场文书
总经理任命书
2014/03/29 职场文书
2014年效能监察工作总结
2014/11/21 职场文书
2019自荐信范文集锦!
2019/07/03 职场文书
高端收音机+蓝牙音箱,JBL TUNER FM带收音蓝牙音箱评测
2021/04/24 无线电