Thinkphp5+uploadify实现的文件上传功能示例

2018-09-07 11:55

阅读:428

  本文实例讲述了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 官方文档那种获取方式。

  保存文件名不能带特殊符号

  修改: 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相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

  希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。


评论


亲,登录后才可以留言!