文件上传之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 相关文章推荐
一个程序下载的管理程序(四)
Oct 09 PHP
PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方法
Mar 10 PHP
php模拟post提交数据的方法
Feb 12 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
Jun 23 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
Jun 12 PHP
yii使用bootstrap分页样式的实例
Jan 17 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
Mar 24 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
May 21 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
Jan 10 PHP
PHP registerXPathNamespace()函数讲解
Feb 03 PHP
phpstorm激活码2020附使用详细教程
Sep 25 PHP
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
Apr 11 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
屏蔽机器人从你的网站搜取email地址的php代码
2012/11/14 PHP
php查看请求头信息获取远程图片大小的方法分享
2013/12/25 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
2014/05/10 PHP
ThinkPHP查询中的魔术方法简述
2014/06/25 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
php实现scws中文分词搜索的方法
2015/12/25 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
javascript拓展DOM操作 prependChild insertAfert
2010/11/17 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
JavaScript中document.forms[0]与getElementByName区别
2015/01/21 Javascript
javascript查询字符串参数的方法
2015/01/28 Javascript
jQuery使用prepend()方法在元素前添加内容用法实例
2015/03/26 Javascript
JS函数arguments数组获得实际传参数个数的实现方法
2016/05/28 Javascript
修改Jquery Dialog 位置的实现方法
2016/08/26 Javascript
解决angularjs前后端分离调用接口传递中文时中文乱码的问题
2018/08/13 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
微信小程序设置全局请求URL及封装wx.request请求操作示例
2019/04/02 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
详解python之多进程和进程池(Processing库)
2017/06/09 Python
Python中max函数用于二维列表的实例
2018/04/03 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
python的依赖管理的实现
2019/05/14 Python
Python中一些深不见底的“坑”
2019/06/12 Python
Python爬取豆瓣视频信息代码实例
2019/11/16 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
2020/03/02 Python
配置python的编程环境之Anaconda + VSCode的教程
2020/03/29 Python
Python PyQt5整理介绍
2020/04/01 Python
Django框架配置mysql数据库实现过程
2020/04/22 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
美国医疗用品、医疗设备和家庭保健用品商店:Medical Supply Depot
2018/07/08 全球购物
维德科技C#面试题笔试题
2015/12/09 面试题
应届生体育教师自荐信
2013/10/03 职场文书
汽车装潢店创业计划书范文
2014/02/05 职场文书
党的群众路线教育实践活动总结报告
2014/04/28 职场文书
导游词之天津古文化街
2019/11/09 职场文书
详解vue中v-for的key唯一性
2021/05/15 Vue.js