下面通过一段代码给大家演示下,主要分为1.前台文件index.html和 2.后台文件upload.php。具体代码如下所示:
1.前台文件index.html
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\" >
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\" />
<head>
<title>SWFUpload</title>
<link href=\"css/default.css\" rel=\"stylesheet\" type=\"text/css\" />
<!--Swfupload插件begin-->
<script type=\"text/javascript\" src=\"swfupload/swfupload.js\"></script>
<script type=\"text/javascript\" src=\"js/swfupload.queue.js\"></script>
<script type=\"text/javascript\" src=\"js/fileprogress.js\"></script>
<script type=\"text/javascript\" src=\"js/handlers.js\"></script>
<!--Swfupload插件end-->
<script type=\"text/javascript\">
var swfu;
window.onload = function() {
var settings = {
flash_url : \"swfupload/swfupload.swf\",
upload_url: \"upload.php\", // 后台文件
post_params: {\"PHPSESSID\" : \"<?php echo session_id(); ?>\"},
file_size_limit : \"100 MB\",
file_types : \"*.*\",
file_types_description : \"All Files\",
file_upload_limit : 100,
file_queue_limit : 0,
custom_settings : {
progressTarget : \"fsUploadProgress\",
cancelButtonId : \"btnCancel\"
},
debug: false,
// 按钮设置
button_image_url: \"images/TestImageNoText_65x29.png\", // Flash样式图片文件
button_width: \"65\",
button_height: \"29\",
button_placeholder_id: \"spanButtonPlaceHolder\",
button_text: \'<span class=\"theFont\">浏览</span>\',
button_text_style: \".theFont { font-size: 16; }\",
button_text_left_padding: 12,
button_text_top_padding: 3,
// 句柄设置
file_queued_handler : fileQueued,
file_queue_error_handler : fileQueueError,
file_dialog_complete_handler : fileDialogComplete,
upload_start_handler : uploadStart,
upload_progress_handler : uploadProgress,
upload_error_handler : uploadError,
upload_success_handler : uploadSuccess,
upload_complete_handler : uploadComplete,
queue_complete_handler : queueComplete
};
swfu = new SWFUpload(settings);
};
</script>
</head>
<body>
<div id=\"header\">
<h1 id=\"logo\"><a href=\"/\">SWFUpload</a></h1>
<div id=\"version\">v2.2.0</div>
</div>
<div id=\"content\">
<form id=\"form1\" action=\"index.php\" method=\"post\" enctype=\"multipart/form-data\">
<p>点击“浏览”按钮,选择您要上传的文档文件后,系统将自动上传并在完成后提示您。</p>
<p>请勿上传包含中文文件名的文件!</p>
<div class=\"fieldset flash\" id=\"fsUploadProgress\">
<span class=\"legend\">快速上传</span>
</div>
<div id=\"divStatus\">0 个文件已上传</div>
<div>
<span id=\"spanButtonPlaceHolder\"></span>
<input id=\"btnCancel\" type=\"button\" value=\"取消所有上传\" onclick=\"swfu.cancelQueue();\" disabled=\"disabled\" style=\"margin-left: 2px; font-size: 8pt; height: 29px;\" />
</div>
</form>
</div>
<div align=\"center\">Hanization By <a href=\"http://imll.net\" target=\"_blank\">Leo.C,</a>
</div>
</body>
</html>
2.后台文件upload.php
<?php
// 传递session值(由于Flash与session不兼容,只能通过参数传递获取)
if (isset($_POST[\"PHPSESSID\"])) {
session_id($_POST[\"PHPSESSID\"]);
} else if (isset($_GET[\"PHPSESSID\"])) {
session_id($_GET[\"PHPSESSID\"]);
}
session_start();
// 设置POST最大值
$POST_MAX_SIZE = ini_get(\'post_max_size\');
$unit = strtoupper(substr($POST_MAX_SIZE, -1));
$multiplier = ($unit == \'M\' ? 1048576 : ($unit == \'K\' ? 1024 : ($unit == \'G\' ? 1073741824 : 1)));
if ((int)$_SERVER[\'CONTENT_LENGTH\'] > $multiplier*(int)$POST_MAX_SIZE && $POST_MAX_SIZE) {
header(\"HTTP/1.1 500 Internal Server Error\");
echo \"POST exceeded maximum allowed size.\";
exit(0);
}
// 基本设置
$save_path = getcwd() . \"/file/\"; // 文件上传位置
$upload_name = \"Filedata\";
$max_file_size_in_bytes = 2147483647; // 2GB
$extension_whitelist = array(\"doc\", \"txt\", \"jpg\", \"gif\", \"png\"); // 允许文件类型
$valid_chars_regex = \'.A-Z0-9_ !@#$%^&()+={}\\[\\]\\\',~`-\'; // 文件名规则
// 其他变量
$MAX_FILENAME_LENGTH = 260;
$file_name = \"\";
$file_extension = \"\";
$uploadErrors = array(
0=>\"文件上传成功\",
1=>\"上传的文件超过了 php.ini 文件中的 upload_max_filesize directive 里的设置\",
2=>\"上传的文件超过了 HTML form 文件中的 MAX_FILE_SIZE directive 里的设置\",
3=>\"上传的文件仅为部分文件\",
4=>\"没有文件上传\",
6=>\"缺少临时文件夹\"
);
// 检测文件是否上传正确
if (!isset($_FILES[$upload_name])) {
HandleError(\"No upload found in \\$_FILES for \" . $upload_name);
exit(0);
} else if (isset($_FILES[$upload_name][\"error\"]) && $_FILES[$upload_name][\"error\"] != 0) {
HandleError($uploadErrors[$_FILES[$upload_name][\"error\"]]);
exit(0);
} else if (!isset($_FILES[$upload_name][\"tmp_name\"]) || !@is_uploaded_file($_FILES[$upload_name][\"tmp_name\"])) {
HandleError(\"Upload failed is_uploaded_file test.\");
exit(0);
} else if (!isset($_FILES[$upload_name][\'name\'])) {
HandleError(\"File has no name.\");
exit(0);
}
// 检测文件尺寸
$file_size = @filesize($_FILES[$upload_name][\"tmp_name\"]);
if (!$file_size || $file_size > $max_file_size_in_bytes) {
HandleError(\"File exceeds the maximum allowed size\");
exit(0);
}
if ($file_size <= 0) {
HandleError(\"File size outside allowed lower bound\");
exit(0);
}
// 检测文件名字为空
$file_name = preg_replace(\'/[^\'.$valid_chars_regex.\']|\\.+$/i\', \"\", basename($_FILES[$upload_name][\'name\']));
if (strlen($file_name) == 0 || strlen($file_name) > $MAX_FILENAME_LENGTH) {
HandleError(\"Invalid file name\");
exit(0);
}
// 检测重名文件
if (file_exists($save_path . $file_name)) {
HandleError(\"File with this name already exists\");
exit(0);
}
// 检测后缀名
$path_info = pathinfo($_FILES[$upload_name][\'name\']);
$file_extension = $path_info[\"extension\"];
$is_valid_extension = false;
foreach ($extension_whitelist as $extension) {
if (strcasecmp($file_extension, $extension) == 0) {
$is_valid_extension = true;
break;
}
}
if (!$is_valid_extension) {
HandleError(\"Invalid file extension\");
exit(0);
}
// 保存文件
if (!@move_uploaded_file($_FILES[$upload_name][\"tmp_name\"], $save_path.$file_name)) {
HandleError(\"文件无法保存.\");
exit(0);
}
// 成功输出
echo \"File Received\";
exit(0);
function HandleError($message) {
header(\"HTTP/1.1 500 Internal Server Error\");
echo $message;
}
?>
以上代码就是实现文件上传之SwFUpload插件的全部内容,希望大家喜欢。
本文地址:https://www.stayed.cn/item/5153
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我