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 相关文章推荐
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
May 16 PHP
PHP中require和include路径问题详解
Dec 25 PHP
php实现的用户查询类实例
Jun 18 PHP
php实现对象克隆的方法
Jun 20 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
Jan 07 PHP
Zend Framework教程之Application用法实例详解
Mar 14 PHP
Yii2下点击验证码的切换实例代码
Mar 14 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
Oct 11 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
Laravel源码解析之路由的使用和示例详解
Sep 27 PHP
thinkphp5实现微信扫码支付
Dec 23 PHP
phpstudy2020搭建站点的实现示例
Oct 30 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/09/28 PHP
PHP 编写大型网站问题集
2010/05/07 PHP
PHP读取RSS(Feed)简单实例
2014/06/12 PHP
PHP脚本自动识别验证码查询汽车违章
2016/12/20 PHP
弹出广告特效代码(一个IP只弹出一次)
2007/05/11 Javascript
javascript 获取网页参数系统
2008/07/19 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
jQuery之选择组件的深入解析
2013/06/19 Javascript
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
2013/09/21 Javascript
javascript中typeof的使用示例
2013/12/19 Javascript
Javascript中的方法链(Method Chaining)介绍
2015/03/15 Javascript
js实现非常简单的焦点图切换特效实例
2015/05/07 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
微信小程序 开发之全局配置
2017/05/05 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
基于Vue el-autocomplete 实现类似百度搜索框功能
2019/10/25 Javascript
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
Python中使用filter过滤列表的一个小技巧分享
2020/05/02 Python
OpenCV+Python3.5 简易手势识别的实现
2020/12/21 Python
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
Gap英国官网:Gap UK
2018/07/18 全球购物
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
高中自我评价分享
2013/12/05 职场文书
公司企业表扬信
2014/01/11 职场文书
校园安全标语
2014/06/07 职场文书
自愿离婚协议书2015
2015/01/26 职场文书
护理工作心得体会
2016/01/22 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
jdbc使用PreparedStatement批量插入数据的方法
2021/04/27 MySQL