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 相关文章推荐
在php和MySql中计算时间差的方法
Apr 22 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
Sep 05 PHP
PHP COOKIE及时生效的方法介绍
Feb 14 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
Jun 12 PHP
php获取网页里所有图片并存入数组的方法
Apr 06 PHP
PHP JSON格式的中文显示问题解决方法
Apr 09 PHP
通过PHP简单实例介绍文件上传
Dec 16 PHP
php获取ajax的headers方法与内容实例
Dec 27 PHP
PHP排序二叉树基本功能实现方法示例
May 26 PHP
php实现二叉树中和为某一值的路径方法
Oct 14 PHP
apache集成php7.3.5的详细步骤
Jun 20 PHP
laravel 去掉index.php伪静态的操作方法
Oct 12 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
PHP在网页中动态生成PDF文件详细教程
2014/07/05 PHP
php下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
javascript整除实现代码
2010/11/23 Javascript
jQuery 获取和设置select下拉框的值实现代码
2013/11/08 Javascript
jQuery中的编程范式详解
2014/12/15 Javascript
JavaScript中的substr()方法使用详解
2015/06/06 Javascript
全面了解JavaScript的数据类型转换
2016/07/01 Javascript
Bootstrap风格的WPF样式
2016/12/07 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
vue resource post请求时遇到的坑
2017/10/19 Javascript
JS函数内部属性之arguments和this实例解析
2018/10/07 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
layui实现三级导航菜单
2019/07/26 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
微信小程序实现单个或多个倒计时功能
2020/11/01 Javascript
Vant picker 多级联动操作
2020/11/02 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
2020/11/09 Javascript
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python获取代理IP的实例分享
2018/05/07 Python
基于python requests库中的代理实例讲解
2018/05/07 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
Django框架验证码用法实例分析
2019/05/10 Python
Python OpenCV 使用滑动条来调整函数参数的方法
2019/07/08 Python
Python 画出来六维图
2019/07/26 Python
Python3 翻转二叉树的实现
2019/09/30 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
matlab中二维插值函数interp2的使用详解
2020/04/22 Python
请解释virtual关键字的含义
2015/06/17 面试题
新郎父亲婚宴答谢词
2014/01/11 职场文书
致接力运动员广播稿
2014/02/17 职场文书
2014年国庆节演讲稿
2014/09/19 职场文书
奶茶店的创业计划书该怎么写?
2019/07/15 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python
MySQL索引失效的典型案例
2021/06/05 MySQL
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL
Sql Server 行数据的某列值想作为字段列显示的方法
2022/04/20 SQL Server