文件上传之SWFUpload插件(代码)

前端技术 2023/09/02 PHP

 下面通过一段代码给大家演示下,主要分为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

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。