最近研究了下大文件上传的方法,找到了webuploader js 插件进行大文件上传,大家也可以参考这篇文章进行学习:《Web Uploader文件上传插件使用详解》
使用
使用webuploader分成简单直选要引入
<!--引入CSS--> <link rel=\"stylesheet\" type=\"text/css\" href=\"webuploader文件夹/webuploader.css\"> <!--引入JS--> <script type=\"text/javascript\" src=\"webuploader文件夹/webuploader.js\"></script>
HTML部分
<div id=\"uploader\" class=\"wu-example\"> <!--用来存放文件信息--> <div id=\"thelist\" class=\"uploader-list\"></div> <div class=\"btns\"> <div id=\"picker\">选择文件</div> <button id=\"ctlBtn\" class=\"btn btn-default\">开始上传 </button> </div> </div>
初始化Web Uploader
jQuery(function() { $list = $(\'#thelist\'), $btn = $(\'#ctlBtn\'), state = \'pending\', uploader; uploader = WebUploader.create({ // 不压缩image resize: false, // swf文件路径 swf: \'uploader.swf\', // 文件接收服务端。 server: upload.php, // 选择文件的按钮。可选。 // 内部根据当前运行是创建,可能是input元素,也可能是flash. pick: \'#picker\', chunked: true, chunkSize:2*1024*1024, auto: true, accept: { title: \'Images\', extensions: \'gif,jpg,jpeg,bmp,png\', mimeTypes: \'image/*\' } });
upload.php处理
以下是根据别人的例子自己拿来改的php 后台代码
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\"); if ($_SERVER[\'REQUEST_METHOD\'] == \'OPTIONS\') { exit; // finish preflight CORS requests here } if ( !empty($_REQUEST[ \'debug\' ]) ) { $random = rand(0, intval($_REQUEST[ \'debug\' ]) ); if ( $random === 0 ) { header(\"HTTP/1.0 500 Internal Server Error\"); exit; } } // header(\"HTTP/1.0 500 Internal Server Error\"); // exit; // 5 minutes execution time @set_time_limit(5 * 60); // Uncomment this one to fake upload time // usleep(5000); // Settings // $targetDir = ini_get(\"upload_tmp_dir\") . DIRECTORY_SEPARATOR . \"plupload\"; $targetDir = \'uploads\'.DIRECTORY_SEPARATOR.\'file_material_tmp\'; $uploadDir = \'uploads\'.DIRECTORY_SEPARATOR.\'file_material\'; $cleanupTargetDir = true; // Remove old files $maxFileAge = 5 * 3600; // Temp file age in seconds // Create target dir if (!file_exists($targetDir)) { @mkdir($targetDir); } // Create target dir if (!file_exists($uploadDir)) { @mkdir($uploadDir); } // Get a file name if (isset($_REQUEST[\"name\"])) { $fileName = $_REQUEST[\"name\"]; } elseif (!empty($_FILES)) { $fileName = $_FILES[\"file\"][\"name\"]; } else { $fileName = uniqid(\"file_\"); } $oldName = $fileName; $filePath = $targetDir . DIRECTORY_SEPARATOR . $fileName; // $uploadPath = $uploadDir . DIRECTORY_SEPARATOR . $fileName; // Chunking might be enabled $chunk = isset($_REQUEST[\"chunk\"]) ? intval($_REQUEST[\"chunk\"]) : 0; $chunks = isset($_REQUEST[\"chunks\"]) ? intval($_REQUEST[\"chunks\"]) : 1; // 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}_{$chunk}.part\" || $tmpfilePath == \"{$filePath}_{$chunk}.parttmp\") { continue; } // Remove temp file if it is older than the max age and is not the current file if (preg_match(\'/\\.(part|parttmp)$/\', $file) && (@filemtime($tmpfilePath) < time() - $maxFileAge)) { @unlink($tmpfilePath); } } closedir($dir); } // Open temp file if (!$out = @fopen(\"{$filePath}_{$chunk}.parttmp\", \"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); rename(\"{$filePath}_{$chunk}.parttmp\", \"{$filePath}_{$chunk}.part\"); $index = 0; $done = true; for( $index = 0; $index < $chunks; $index++ ) { if ( !file_exists(\"{$filePath}_{$index}.part\") ) { $done = false; break; } } if ( $done ) { $pathInfo = pathinfo($fileName); $hashStr = substr(md5($pathInfo[\'basename\']),8,16); $hashName = time() . $hashStr . \'.\' .$pathInfo[\'extension\']; $uploadPath = $uploadDir . DIRECTORY_SEPARATOR .$hashName; if (!$out = @fopen($uploadPath, \"wb\")) { die(\'{\"jsonrpc\" : \"2.0\", \"error\" : {\"code\": 102, \"message\": \"Failed to open output stream.\"}, \"id\" : \"id\"}\'); } if ( flock($out, LOCK_EX) ) { for( $index = 0; $index < $chunks; $index++ ) { if (!$in = @fopen(\"{$filePath}_{$index}.part\", \"rb\")) { break; } while ($buff = fread($in, 4096)) { fwrite($out, $buff); } @fclose($in); @unlink(\"{$filePath}_{$index}.part\"); } flock($out, LOCK_UN); } @fclose($out); $response = [ \'success\'=>true, \'oldName\'=>$oldName, \'filePaht\'=>$uploadPath, \'fileSize\'=>$data[\'size\'], \'fileSuffixes\'=>$pathInfo[\'extension\'], \'file_id\'=>$data[\'id\'], ]; die(json_encode($response)); } // Return Success JSON-RPC response die(\'{\"jsonrpc\" : \"2.0\", \"result\" : null, \"id\" : \"id\"}\');
以上就是本文的全部内容,希望对大家的学习有所帮助。
本文地址:https://www.stayed.cn/item/6780
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我