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 相关文章推荐
PHP4与PHP3中一个不兼容问题的解决方法
Oct 09 PHP
PHP5中虚函数的实现方法分享
Apr 20 PHP
PHP设计模式之观察者模式(Observer)详细介绍和代码实例
Apr 08 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
Nov 03 PHP
php实现图片添加描边字和马赛克的方法
Dec 10 PHP
php生成不重复随机数、数组的4种方法分享
Mar 30 PHP
PHP简单实现断点续传下载的方法
Sep 25 PHP
PHP中Http协议post请求参数
Nov 02 PHP
PHP中$GLOBALS与global的区别详解
Mar 21 PHP
PHP实现支持CURL字符串证书传输的方法
Mar 23 PHP
php求斐波那契数的两种实现方式【递归与递推】
Sep 09 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 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
PHP4.04简明安装
2006/10/09 PHP
php实现的常见排序算法汇总
2014/09/08 PHP
在Windows系统下使用PHP生成Word文档的教程
2015/07/03 PHP
PHP实现的自定义数组排序函数与排序类示例
2016/11/18 PHP
php实现base64图片上传方式实例代码
2017/02/22 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
js获取iframe中的window对象的实现方法
2016/05/20 Javascript
jquery动态添加文本并获取值的方法
2016/10/12 Javascript
jQuery源码分析之init的详细介绍
2017/02/13 Javascript
vue-router路由简单案例介绍
2017/02/21 Javascript
Angular实现表单验证功能
2017/11/13 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
Angular5中调用第三方库及jQuery的添加的方法
2018/06/07 jQuery
JS异步执行结果获取的3种解决方式
2019/02/19 Javascript
nodejs处理tcp连接的核心流程
2021/02/26 NodeJs
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
python动态加载变量示例分享
2014/02/17 Python
Python实现二叉搜索树
2016/02/03 Python
tensorflow建立一个简单的神经网络的方法
2018/02/10 Python
Python倒排索引之查找包含某主题或单词的文件
2019/11/13 Python
Pandas实现dataframe和np.array的相互转换
2019/11/30 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
Python+Xlwings 删除Excel的行和列
2020/12/19 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
英国天然有机美容护肤品:Neal’s Yard Remedies
2018/05/05 全球购物
几道数据库的面试题或笔试题
2014/05/31 面试题
销售总经理岗位职责
2014/03/15 职场文书
国际政治学专业推荐信
2014/09/26 职场文书
教师批评与自我批评心得体会
2014/10/16 职场文书
初三语文教学反思
2016/03/03 职场文书
导游词之清晏园
2019/11/22 职场文书
vue实现可拖拽的dialog弹框
2021/05/13 Vue.js