本文实例讲述了thinkPHP5框架整合plupload实现图片批量上传功能的方法。分享给大家供大家参考,具体如下:
在官网下载plupload http://http//www.plupload.com
或者点击此处本站下载。
这里我们使用的是pluploadQueue
在HTML页面引入相应的css和js,然后根据示例代码修改为自己的代码
<link rel=\"stylesheet\" href=\"/assets/plupupload/css/jquery.plupload.queue.css\" rel=\"external nofollow\" type=\"text/css\" media=\"screen\" /> <div class=\"form-box-header\"><h3>{:lang(\'photo\')}</h3></div> <div class=\"t-d-in-editor\"> <div class=\"t-d-in-box\"> <div id=\"uploader\"> <p>{:lang(\'plupupload_tip\')}</p> </div> <div id=\"uploaded\"></div> </div> </div> <script type=\"text/javascript\" src=\"/assets/plupupload/plupload.full.min.js\"></script> <script type=\"text/javascript\" src=\"/assets/plupupload/jquery.plupload.queue.js\"></script> <script type=\"text/javascript\"> $(function() { // Setup html5 version $(\"#uploader\").pluploadQueue({ // General settings runtimes : \'html5,flash,silverlight,html4\', url : \'{:url(\"photo/upphoto\")}\', chunk_size: \'1mb\', rename : true, dragdrop: true, filters : { // Maximum file size max_file_size : \'10mb\', // Specify what files to browse for mime_types: [ {title : \"Image files\", extensions : \"jpg,gif,png\"} ] }, // Resize images on clientside if we can resize : {width : 320, height : 240, quality : 90}, flash_swf_url : \'/assets/plupupload/Moxie.swf\', silverlight_xap_url : \'/assets/plupupload/Moxie.xap\', init: { PostInit: function() { $(\'#uploaded\').html(\"\"); }, FileUploaded : function(uploader , files, result) { up_image = result.response; if(up_image != \"\"){ $(\"#uploaded\").append(\"<input type=\'hidden\' name=\'images[]\' value=\'\"+up_image+\"\'/>\"); //这里获取到上传结果 } } } }); }); </script>
plupload整合:
<?php /* * 文件上传 * * Donald * 2017-3-21 */ namespace app\\backend\\logic; use think\\Model; class Plupupload extends Model{ public function upload_pic($file_type=\"data\"){ #!! IMPORTANT: #!! this file is just an example, it doesn\'t incorporate any security checks and #!! is not recommended to be used in production environment as it is. Be sure to #!! revise it and customize to your needs. // Make sure file is not cached (as it happens for example on iOS devices) header(\"Expires: Mon, 26 Jul 1997 05:00:00 GMT\"); header(\"Last-Modified: \" . gmdate(\"D, d M Y H:i:s\") . \" GMT\"); header(\"Cache-Control: no-store, no-cache, must-revalidate\"); header(\"Cache-Control: post-check=0, pre-check=0\", false); header(\"Pragma: no-cache\"); /* // Support CORS header(\"Access-Control-Allow-Origin: *\"); // other CORS headers if any... if ($_SERVER[\'REQUEST_METHOD\'] == \'OPTIONS\') { exit; // finish preflight CORS requests here } */ // 5 minutes execution time @set_time_limit(5 * 60); // Uncomment this one to fake upload time // usleep(5000); // Settings //重新设置上传路径 $uploads = config(\'uploads_dir\'); if(!empty($file_type)){ $uploads = $uploads .$file_type.\"/\".date(\"Ymd\"); } $targetDir = $uploads; //$targetDir = \'uploads\'; $cleanupTargetDir = true; // Remove old files $maxFileAge = 5 * 3600; // Temp file age in seconds // Create target dir if (!file_exists($targetDir)) { @mkdir($targetDir); } // Get a file name if (isset($_REQUEST[\"name\"])) { $fileName = $_REQUEST[\"name\"]; } elseif (!empty($_FILES)) { $fileName = $_FILES[\"file\"][\"name\"]; } else { $fileName = uniqid(\"file_\"); } //重命名文件 $fileName_arr = explode(\".\", $fileName); $fileName = myrule().\".\".$fileName_arr[1]; //rule()请查看上篇我的上篇博客thinkphp同时上传多张图片文件重名问题 $filePath = $targetDir . DIRECTORY_SEPARATOR . $fileName; // Chunking might be enabled $chunk = isset($_REQUEST[\"chunk\"]) ? intval($_REQUEST[\"chunk\"]) : 0; $chunks = isset($_REQUEST[\"chunks\"]) ? intval($_REQUEST[\"chunks\"]) : 0; // Remove old temp files if ($cleanupTargetDir) { if (!is_dir($targetDir) || !$dir = opendir($targetDir)) { die(\'{\"jsonrpc\" : \"2.0\", \"error\" : {\"code\": 100, \"message\": \"Failed to open temp directory.\"}, \"id\" : \"id\"}\'); } while (($file = readdir($dir)) !== false) { $tmpfilePath = $targetDir . DIRECTORY_SEPARATOR . $file; // If temp file is current file proceed to the next if ($tmpfilePath == \"{$filePath}.part\") { continue; } // Remove temp file if it is older than the max age and is not the current file if (preg_match(\'/\\.part$/\', $file) && (filemtime($tmpfilePath) < time() - $maxFileAge)) { @unlink($tmpfilePath); } } closedir($dir); } // Open temp file if (!$out = @fopen(\"{$filePath}.part\", $chunks ? \"ab\" : \"wb\")) { die(\'{\"jsonrpc\" : \"2.0\", \"error\" : {\"code\": 102, \"message\": \"Failed to open output stream.\"}, \"id\" : \"id\"}\'); } if (!empty($_FILES)) { if ($_FILES[\"file\"][\"error\"] || !is_uploaded_file($_FILES[\"file\"][\"tmp_name\"])) { die(\'{\"jsonrpc\" : \"2.0\", \"error\" : {\"code\": 103, \"message\": \"Failed to move uploaded file.\"}, \"id\" : \"id\"}\'); } // Read binary input stream and append it to temp file if (!$in = @fopen($_FILES[\"file\"][\"tmp_name\"], \"rb\")) { die(\'{\"jsonrpc\" : \"2.0\", \"error\" : {\"code\": 101, \"message\": \"Failed to open input stream.\"}, \"id\" : \"id\"}\'); } } else { if (!$in = @fopen(\"php://input\", \"rb\")) { die(\'{\"jsonrpc\" : \"2.0\", \"error\" : {\"code\": 101, \"message\": \"Failed to open input stream.\"}, \"id\" : \"id\"}\'); } } while ($buff = fread($in, 4096)) { fwrite($out, $buff); } @fclose($out); @fclose($in); // Check if file has been uploaded if (!$chunks || $chunk == $chunks - 1) { // Strip the temp .part suffix off rename(\"{$filePath}.part\", $filePath); } // Return Success JSON-RPC response die($filePath); //这里直接返回结果 // die(\'{\"jsonrpc\" : \"2.0\", \"result\" : \"\'.$filePath.\'\", \"id\" : \"id\"}\'); } }
最后Controller或Model获取结果并保存
$images = $request->post(\'images/a\'); //这里一定要注意, thinkphp通过name获取post数组时会获取不到数据,需要在name后加/a,表示获取数组详见Request的typeCast model(\'PhotoImage\')->query_insert($images, $id);//批量插入图片
/** * 强制类型转换 * @param string $data * @param string $type * @return mixed */ private function typeCast(&$data, $type) { switch (strtolower($type)) { // 数组 case \'a\': $data = (array) $data; break; // 数字 case \'d\': $data = (int) $data; break; // 浮点 case \'f\': $data = (float) $data; break; // 布尔 case \'b\': $data = (boolean) $data; break; // 字符串 case \'s\': default: if (is_scalar($data)) { $data = (string) $data; } else { throw new \\InvalidArgumentException(\'variable type error:\' . gettype($data)); } } }
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。
© 版权声明
THE END
暂无评论内容