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正则的Unknown Modifier错误解决方法
Mar 02 PHP
解析php中两种缩放图片的函数,为图片添加水印
Jun 14 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
Jun 19 PHP
Codeigniter(CI)框架分页函数及相关知识
Nov 03 PHP
Codeigniter的dom类用法实例
Jun 26 PHP
php实现短信发送代码
Jul 05 PHP
php去掉文件前几行的方法
Jul 29 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
Oct 03 PHP
PHP基于SimpleXML生成和解析xml的方法示例
Jul 17 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
Oct 15 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 PHP
七种PHP开发环境搭建工具
Jun 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
用PHP ob_start()控制浏览器cache、生成html实现代码
2010/02/16 PHP
解析用PHP实现var_export的详细介绍
2013/06/20 PHP
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
js调用activeX获取u盘序列号的代码
2011/11/21 Javascript
Jquery Uploadify多文件上传带进度条且传递自己的参数
2013/08/28 Javascript
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
javascript显式类型转换实例分析
2015/04/25 Javascript
jQuery 3.0十大新特性最终版发布
2016/07/14 Javascript
简单的JS控制button颜色随点击更改的实现方法
2017/04/17 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
es6数组之扩展运算符操作实例分析
2020/04/25 Javascript
[02:50]【扭转乾坤,只此一招】DOTA2全新版本永雾林渊开启新篇章
2020/12/24 DOTA
python 生成目录树及显示文件大小的代码
2009/07/23 Python
python二叉树的实现实例
2013/11/21 Python
Python3基础之条件与循环控制实例解析
2014/08/13 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
2018/01/26 Python
python实现拓扑排序的基本教程
2018/03/11 Python
Python用Try语句捕获异常的实例方法
2019/06/26 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
关于Python3爬虫利器Appium的安装步骤
2020/07/29 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
澳大利亚天然护肤品、化妆品和健康产品一站式商店:Nourished Life
2018/12/02 全球购物
欧舒丹俄罗斯官方网站:L’OCCITANE俄罗斯
2019/11/22 全球购物
英文版区域经理求职信
2013/10/23 职场文书
自我鉴定书面格式
2014/01/13 职场文书
初中政治教学反思
2014/01/17 职场文书
开服装店计划书
2014/08/15 职场文书
助残日活动总结
2014/08/27 职场文书
个人先进事迹材料
2014/12/29 职场文书
人事任命通知书
2015/04/21 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书
详解Python requests模块
2021/06/21 Python
java项目构建Gradle的使用教程
2022/03/24 Java/Android