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动态生成JavaScript代码
Mar 09 PHP
一个典型的PHP分页实例代码分享
Jul 28 PHP
php安全配置 如何配置使其更安全
Dec 16 PHP
php中使用array_filter()函数过滤空数组的实现代码
Aug 19 PHP
php实现文件下载代码分享
Aug 19 PHP
PHP中$this和$that指针使用实例
Jan 06 PHP
PHP模板引擎Smarty中的保留变量用法分析
Apr 11 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
May 17 PHP
PHP结合Ueditor并修改图片上传路径
Oct 16 PHP
PHPStrom 新建FTP项目以及在线操作教程
Oct 16 PHP
PHP实现的XML操作类【XML Library】
Dec 29 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
Nov 13 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 身份验证方面的函数
2009/10/11 PHP
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
php表单提交与$_POST实例分析
2015/01/26 PHP
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
php实现指定字符串中查找子字符串的方法
2015/03/17 PHP
PHP 7的一些引人注目的新特性简单介绍
2015/11/08 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
2016/06/24 PHP
PHP常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
Javascript 函数中的参数使用分析
2010/03/27 Javascript
js canvas实现擦除动画
2016/07/16 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
微信小程序 动态传参实例详解
2017/04/27 Javascript
jquery实现搜索框功能实例详解
2018/07/23 jQuery
webpack优化的深入理解
2018/12/10 Javascript
微信小程序实现图片上传
2019/05/23 Javascript
Electron整合React使用搭建开发环境的步骤详解
2020/06/07 Javascript
[01:22:42]2014 DOTA2华西杯精英邀请赛 5 24 DK VS LGD
2014/05/26 DOTA
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
python判断字符串是否纯数字的方法
2014/11/19 Python
python解决Fedora解压zip时中文乱码的方法
2016/09/18 Python
python 对key为时间的dict排序方法
2018/10/17 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
2020/04/18 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
PyCharm设置每行最大长度限制的方法
2019/01/16 Python
python中自带的三个装饰器的实现
2019/11/08 Python
大专应届生个人简历的自我评价
2013/10/15 职场文书
校园自助餐厅的创业计划书
2013/12/26 职场文书
法制宣传标语
2014/06/23 职场文书
教师遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2014年班组工作总结
2014/11/20 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书
Nginx快速入门教程
2021/03/31 Servers
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript
python对文档中元素删除,替换操作
2022/04/02 Python
一文搞懂PHP中的抽象类和接口
2022/05/25 PHP