文件上传之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编写PDF文档生成器
Oct 09 PHP
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
Jan 15 PHP
php下删除字符串中HTML标签的函数
Aug 27 PHP
php面向对象全攻略 (十) final static const关键字的使用
Sep 30 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
Jan 11 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
Feb 22 PHP
使用PHP求两个文件的相对路径
Jun 20 PHP
PHP超牛逼无限极分类生成树方法
May 11 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
May 17 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
Nov 20 PHP
php传值和传引用的区别点总结
Nov 19 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 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
IIS+PHP+MySQL+Zend配置 (视频教程)
2006/12/13 PHP
PHP 基于文件头的文件类型验证类函数
2012/05/01 PHP
php自动加载机制的深入分析
2013/06/08 PHP
国产PHP开发框架myqee新手快速入门教程
2014/07/14 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
2016/12/02 PHP
用apply让javascript函数仅执行一次的代码
2010/06/27 Javascript
jquery蒙版控件实现代码
2010/12/08 Javascript
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
JS实现网站菜单拖拽移位效果的方法
2015/09/24 Javascript
jQuery实现的倒计时效果实例小结
2016/04/16 Javascript
jQuery简单实现向列表动态添加新元素的方法示例
2017/12/25 jQuery
解决vue 给window添加和移除resize事件遇到的坑
2020/07/21 Javascript
React冒泡和阻止冒泡的应用详解
2020/08/18 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
Python多线程实例教程
2014/09/06 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
2017/09/24 Python
一篇文章快速了解Python的GIL
2018/01/12 Python
Python线性回归实战分析
2018/02/01 Python
python邮件发送smtplib使用详解
2020/06/16 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
python 利用pyttsx3文字转语音过程详解
2019/09/25 Python
python用quad、dblquad实现一维二维积分的实例详解
2019/11/20 Python
django admin后管定制-显示字段的实例
2020/03/11 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
2020/08/03 Python
基于python图书馆管理系统设计实例详解
2020/08/05 Python
python palywright库基本使用
2021/01/21 Python
利用CSS3的border-radius绘制太极及爱心图案示例
2016/05/17 HTML / CSS
HTML5 Canvas实现放大镜效果示例
2020/03/25 HTML / CSS
WiFi云数码相框:Nixplay
2018/07/05 全球购物
美国鲜花递送:UrbanStems
2021/01/04 全球购物
办公室驾驶员岗位职责
2013/11/15 职场文书
人力资源经理的岗位职责范本
2014/02/28 职场文书
新闻编辑求职信
2014/07/13 职场文书
只用50行Python代码爬取网络美女高清图片
2021/06/02 Python