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 相关文章推荐
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
Nov 18 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
Dec 29 PHP
php连接mssql的一些相关经验及注意事项
Feb 05 PHP
深入解析fsockopen与pfsockopen的区别
Jul 05 PHP
PHP编程中的常见漏洞和代码实例
Aug 06 PHP
php修改指定文件后缀的方法
Sep 11 PHP
如何让CI框架支持service层
Oct 29 PHP
使用PHP实现下载CSS文件中的图片
Dec 06 PHP
php通过会话控制实现身份验证实例
Oct 18 PHP
PHP实现的各类hash算法长度及性能测试实例
Aug 27 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
thinkPHP+LayUI 流加载实现功能
Sep 27 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代码
2010/07/17 PHP
php pki加密技术(openssl)详解
2013/07/01 PHP
ThinkPHP中自定义错误页面和提示页面实例
2014/11/22 PHP
javascript椭圆旋转相册实现代码
2012/01/16 Javascript
表单提交前触发函数返回true表单才会提交
2014/03/11 Javascript
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
js实现3D图片逐张轮播幻灯片特效代码分享
2015/09/09 Javascript
编写高性能Javascript代码的N条建议
2015/10/12 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
纯JavaScript基于notie.js插件实现消息提示特效
2016/01/18 Javascript
AngularJS延迟加载html template
2016/07/27 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
Node.JS中事件轮询(Event Loop)的解析
2017/02/25 Javascript
jQuery插件FusionCharts实现的Marimekko图效果示例【附demo源码】
2017/03/24 jQuery
Angular模板表单校验方法详解
2017/08/11 Javascript
对于js垃圾回收机制的理解
2017/09/14 Javascript
在Vue中使用axios请求拦截的实现方法
2018/10/25 Javascript
vue项目每30秒刷新1次接口的实现方法
2018/12/04 Javascript
JavaScript简单实现的仿微博留言功能示例
2019/01/17 Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
2019/04/10 jQuery
js最实用string(字符串)类型的使用及截取与拼接详解
2019/04/26 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
python+selenium 脚本实现每天自动登记的思路详解
2020/03/11 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
2020/07/21 Python
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
自我鉴定范文
2013/11/10 职场文书
七年级音乐教学反思
2014/01/26 职场文书
应聘编辑自荐信范文
2014/03/12 职场文书
四群教育工作实施方案
2014/03/26 职场文书
2014领导班子正风肃纪思想汇报
2014/09/18 职场文书
查摆问题整改措施
2014/10/24 职场文书
2019学校运动会开幕词
2019/05/13 职场文书
交通安全宣传标语(100条)
2019/08/22 职场文书
5人制售《绝地求生》游戏外挂获利500多万元 被判刑
2022/03/31 其他游戏