最近研究了下大文件上传的方法,找到了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
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我