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程序
Oct 09 PHP
用PHP实现多服务器共享SESSION数据的方法
Mar 16 PHP
程序员编程十条戒律
Jul 09 PHP
PHP函数学习之PHP函数点评
Jul 05 PHP
PHP使用GIFEncoder类处理gif图片实例
Jul 01 PHP
php递归调用删除数组空值元素的方法
Apr 28 PHP
PHP概率计算函数汇总
Sep 13 PHP
Yii2基于Ajax自动获取表单数据的方法
Aug 10 PHP
Yii2实现上下联动下拉框功能的方法
Aug 10 PHP
Yii2中多表关联查询hasOne hasMany的方法
Feb 15 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 PHP
PHP设计模式之模板方法模式定义与用法详解
Apr 02 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程序员的13个好习惯小结
2012/02/20 PHP
PHP自毁程序(慎用)
2015/07/09 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
PHP+原生态ajax实现的省市联动功能详解
2017/08/15 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
JavaScript 滚轮事件使用说明
2010/03/07 Javascript
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
jquery在vue脚手架中的使用方式示例
2017/08/29 jQuery
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
2019/03/04 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
JS简易计算器实例讲解
2020/06/30 Javascript
js实现星星海特效的示例
2020/09/28 Javascript
跟老齐学Python之再深点,更懂list
2014/09/20 Python
pygame学习笔记(3):运动速率、时间、事件、文字
2015/04/15 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
2018/02/08 Python
Python2和Python3的共存和切换使用
2019/04/12 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
2019/08/06 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
如何在python中处理配置文件代码实例
2020/09/27 Python
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
仓库保管员岗位职责
2013/12/20 职场文书
新闻学专业个人求职信写作
2014/02/04 职场文书
六一节目主持词
2014/04/01 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
2015年安全生产责任书
2015/01/30 职场文书
秦兵马俑导游词
2015/02/02 职场文书
2016党员学习作风建设心得体会
2016/01/21 职场文书
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL