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 常用函数库和一些实用小技巧
Jan 01 PHP
php 无限级数据JSON格式及JS解析
Jul 17 PHP
PHP MySQL应用中使用XOR运算加密算法分享
Aug 28 PHP
php中CI操作多个数据库的代码
Jul 05 PHP
PHP静态调用非静态方法的应用分析
May 02 PHP
php使用curl存储cookie的示例
Mar 31 PHP
使用php语句将数据库*.sql文件导入数据库
May 05 PHP
CodeIgniter安全相关设置汇总
Jul 03 PHP
PHP中创建图像并绘制文字的例子
Nov 19 PHP
PHP通过API获取手机号码归属地
May 28 PHP
浅谈laravel orm 中的一对多关系 hasMany
Oct 21 PHP
tp5框架使用cookie加密算法实现登录功能示例
Feb 10 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
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
jQuery 遍历json数组的实现代码
2020/09/22 Javascript
从盛大通行证上摘下来的身份证验证js代码
2011/01/11 Javascript
简易js代码实现计算器操作
2013/04/15 Javascript
js控制input输入字符解析
2013/12/27 Javascript
百度地图API之本地搜索与范围搜索
2015/07/30 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
JS截取字符串实例详解
2015/11/24 Javascript
关于JS中的apply,call,bind的深入解析
2016/04/05 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
浅谈原生JS中的延迟脚本和异步脚本
2017/07/12 Javascript
React进阶学习之组件的解耦之道
2017/08/07 Javascript
JS计算输出100元钱买100只鸡问题的解决方法
2018/01/04 Javascript
JS中双击和单击事件冲突的解决方法
2018/04/09 Javascript
json数据格式常见操作示例
2019/06/13 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
2020/06/11 Javascript
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
python爬虫自动创建文件夹的功能
2018/08/01 Python
Django单元测试工具test client使用详解
2019/08/02 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
2019/10/25 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
Django单元测试中Fixtures用法详解
2020/02/25 Python
python 伯努利分布详解
2020/02/25 Python
在Keras中CNN联合LSTM进行分类实例
2020/06/29 Python
python rsa-oaep加密的示例代码
2020/09/23 Python
印度尼西亚最大和最全面的网络商城:Blibli.com
2017/10/04 全球购物
澳洲小众品牌的集合网站:BNKR
2018/02/23 全球购物
2014年安全生产责任书
2014/07/22 职场文书
2014年庆祝国庆65周年演讲稿
2014/09/21 职场文书
感谢信范文大全
2015/01/23 职场文书
汶川大地震感悟
2015/08/10 职场文书
简单聊聊Golang中defer预计算参数
2022/03/25 Golang
JS实现数组去重的11种方法总结
2022/04/04 Javascript
Spring Boot项目传参校验的最佳实践指南
2022/04/05 Java/Android
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers