本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。
暂无评论内容