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版(5)
Oct 09 PHP
PHP脚本的10个技巧(3)
Oct 09 PHP
php cookie 作用范围?不要在当前页面使用你的cookie
Mar 24 PHP
phpmyadmin 常用选项设置详解版
Mar 07 PHP
MySQL的FIND_IN_SET函数使用方法分享
Mar 27 PHP
PHP爆绝对路径方法收集整理
Sep 17 PHP
PHP删除非空目录的函数代码小结
Feb 28 PHP
php 目录遍历、删除 函数的使用介绍
Apr 28 PHP
CodeIgniter分页类pagination使用方法示例
Mar 28 PHP
PHP实现可自定义样式的分页类
Mar 29 PHP
PHP实现的简单操作SQLite数据库类与用法示例
Jun 19 PHP
PHP实现的多进程控制demo示例
Jul 22 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数据流应用的简单例子
2012/06/01 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
Jquery 常用方法经典总结
2010/01/28 Javascript
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
JavaScript常用对象的方法和属性小结
2012/01/24 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
js实现的map方法示例代码
2014/01/13 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
2016/06/29 Javascript
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
Python中使用SAX解析xml实例
2014/11/21 Python
Python中特殊函数集锦
2015/07/27 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
2017/07/20 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
python将.ppm格式图片转换成.jpg格式文件的方法
2018/10/27 Python
解决Django一个表单对应多个按钮的问题
2019/07/18 Python
python global和nonlocal用法解析
2020/02/03 Python
python代码实现图书管理系统
2020/11/30 Python
详解CSS3:overflow属性
2020/11/17 HTML / CSS
html5生成柱状图(条形图)效果的实例代码
2016/03/25 HTML / CSS
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
优质服务活动实施方案
2014/05/02 职场文书
2014年预备党员学习新党章思想汇报
2014/09/15 职场文书
2014年自愿离婚协议书
2014/10/10 职场文书
城南旧事观后感
2015/06/11 职场文书
在人间读书笔记
2015/06/30 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
结婚十年感言
2015/07/31 职场文书
如何写好一份优秀的工作总结?
2019/06/21 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
eclipse创建项目没有dynamic web的解决方法
2021/06/24 Java/Android
JVM之方法返回地址详解
2022/02/28 Java/Android
python井字棋游戏实现人机对战
2022/04/28 Python