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


Posted in PHP onJuly 30, 2015

 下面通过一段代码给大家演示下,主要分为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插件的全部内容,希望大家喜欢。

PHP 相关文章推荐
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
Aug 07 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
Jan 03 PHP
PHP持久连接mysql_pconnect()函数使用介绍
Feb 05 PHP
基于PHP magic_quotes_gpc的使用方法详解
Jun 24 PHP
9段PHP实用功能的代码推荐
Oct 14 PHP
php中常见的sql攻击正则表达式汇总
Nov 06 PHP
Yii中使用PHPExcel导出Excel的方法
Dec 26 PHP
php简单获取文件扩展名的方法
Mar 24 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
May 16 PHP
PHP检测数据类型的几种方法(总结)
Mar 04 PHP
微信小程序 消息推送php服务器验证实例详解
Mar 30 PHP
PDO::query讲解
Jan 29 PHP
js代码实现微博导航栏
Jul 30 #PHP
两种php给图片加水印的实现代码
Apr 18 #PHP
php简单生成随机数的方法
Jul 30 #PHP
php简单判断文本编码的方法
Jul 30 #PHP
php实现的数字验证码及数字运算验证码
Jul 30 #PHP
Thinkphp+smarty+uploadify实现无刷新上传
Jul 30 #PHP
PHP实现批量修改文件后缀名的方法
Jul 30 #PHP
You might like
世界第一个无线广播电台 KDKA
2021/03/01 无线电
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
2010/05/10 PHP
网站用php实现paypal整合方法
2010/11/28 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
2011/01/27 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
php判断访问IP的方法
2015/06/19 PHP
用php+ajax新建流程(请假、进货、出货等)
2017/06/11 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
2017/09/13 PHP
PHP实现微信对账单处理
2018/10/01 PHP
discuz论坛更换域名,详细文件修改步骤
2020/12/09 PHP
通过下拉框的值来确定输入框是否可以为空的代码
2011/10/18 Javascript
js 自动播放的实例代码
2013/11/19 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
js脚本实现数据去重
2014/11/27 Javascript
jQuery元素选择器用法实例
2014/12/23 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
JS获取元素多层嵌套思路详解
2016/05/16 Javascript
js模块加载方式浅析
2017/08/12 Javascript
Vue.set()实现数据动态响应的方法
2018/02/07 Javascript
Vue-Quill-Editor富文本编辑器的使用教程
2018/09/21 Javascript
Javascript的this详解
2019/03/23 Javascript
js+springMVC 提交数组数据到后台的实例
2019/09/21 Javascript
js实现鼠标滑动到某个div禁止滚动
2020/09/17 Javascript
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
Python 删除整个文本中的空格,并实现按行显示
2018/07/24 Python
python实现简单tftp(基于udp协议)
2018/07/30 Python
python3实现单目标粒子群算法
2019/11/14 Python
精灵市场:Pixie Market
2019/06/18 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
证婚人经典证婚词
2014/01/09 职场文书
八年级美术教学反思
2014/02/02 职场文书
暑假打工感想
2015/08/07 职场文书
教导处教学工作总结
2015/08/12 职场文书