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 相关文章推荐
3.从实例开始
Oct 09 PHP
在WIN98下以apache模块方式安装php
Oct 09 PHP
PHP 日期时间函数的高级应用技巧
Oct 10 PHP
完美解决PHP中文乱码
Nov 26 PHP
php自定义函数之递归删除文件及目录
Aug 08 PHP
php中通过Ajax如何实现异步文件上传的代码实例
May 07 PHP
php中3des加密代码(完全与.net中的兼容)
Aug 02 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
Mar 11 PHP
PHP实现过滤掉非汉字字符只保留中文字符
Jun 04 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
Mar 28 PHP
基于php数组中的索引数组和关联数组详解
Mar 12 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
Sep 26 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的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
2016/04/07 PHP
JavaScript调用后台的三种方法实例
2013/10/17 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
js中日期的加减法
2015/05/06 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
jQueryUI Datepicker组件设置日期高亮
2016/10/13 Javascript
AngularJs入门教程之环境搭建+创建应用示例
2016/11/01 Javascript
IntersectionObserver API 详解篇
2016/12/11 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
基于JavaScript定位当前的地理位置
2017/04/11 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
vue awesome swiper异步加载数据出现的bug问题
2018/07/03 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
2020/04/28 Javascript
VueCli生产环境打包部署跨域失败的解决
2020/11/13 Javascript
Python实现的爬虫刷回复功能示例
2018/06/07 Python
python3使用matplotlib绘制条形图
2020/03/25 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
Django的性能优化实现解析
2019/07/30 Python
python利用itertools生成密码字典并多线程撞库破解rar密码
2019/08/12 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
Django框架反向解析操作详解
2019/11/28 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
澳大利亚最好的厨具店:Kitchen Warehouse
2018/03/13 全球购物
For Art’s Sake官网:手工制作的奢华眼镜
2018/12/15 全球购物
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
创业计划书之酒店
2019/08/30 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
Windows下载并安装MySQL8.0.x 版本的完整教程
2022/04/10 MySQL