文件上传之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连接Oracle数据库
Oct 09 PHP
php header()函数使用说明
Jul 10 PHP
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
Mar 15 PHP
php smarty 二级分类代码和模版循环例子
Jun 01 PHP
php实现获取文件mime类型的方法
Feb 11 PHP
php判断两个浮点数是否相等的方法
Mar 14 PHP
thinkPHP使用post方式查询时分页失效的解决方法
Dec 09 PHP
PHP版单点登陆实现方案的实例
Nov 17 PHP
ThinkPHP实现附件上传功能
Apr 27 PHP
利用Laravel生成Gravatar头像地址的优雅方法
Dec 30 PHP
PHP中PDO事务处理操作示例
May 02 PHP
laravel withCount 统计关联数量的方法
Oct 10 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
服务器端解压缩zip的脚本
2006/12/22 PHP
php 来访国内外IP判断代码并实现页面跳转
2009/12/18 PHP
PHP中使用TCPDF生成PDF文档实例
2014/07/01 PHP
php使用GD创建保持宽高比缩略图的方法
2015/04/17 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
设定php简写功能的方法
2019/11/28 PHP
PHP如何使用JWT做Api接口身份认证的实现
2020/02/03 PHP
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
javascript 设置文本框中焦点的位置
2009/11/20 Javascript
基于JQuery的一个简单的鼠标跟随提示效果
2010/09/23 Javascript
JS实现超精简响应鼠标显示二级菜单代码
2015/09/12 Javascript
javascript定义类和类的实现实例详解
2015/12/01 Javascript
jQuery实现图片走马灯效果的原理分析
2016/01/16 Javascript
jQuery使用模式窗口实现在主页面和子页面中互相传值的方法
2016/03/01 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
jQuery与js实现颜色渐变的方法
2016/12/30 Javascript
使用canvas进行图像编辑的实例
2017/08/29 Javascript
为什么我们要做三份 Webpack 配置文件
2017/09/18 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
angular 数据绑定之[]和{{}}的区别
2018/09/25 Javascript
JavaScript中引用vs复制示例详析
2018/12/06 Javascript
JavaScrip数组去重操作实例小结
2019/06/20 Javascript
[01:59]深扒TI7聊天轮盘语音出处 1
2017/05/11 DOTA
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
简单了解Django模板的使用
2017/12/20 Python
Tensorflow中使用tfrecord方式读取数据的方法
2018/06/19 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
Python 如何测试文件是否存在
2020/07/31 Python
Groupon荷兰官方网站:高达70%的折扣
2019/11/01 全球购物
安全教育心得体会
2013/12/29 职场文书
《雷鸣电闪波尔卡》教学反思
2014/02/23 职场文书
《月亮湾》教学反思
2014/04/14 职场文书
2015年毕业生个人自荐书
2015/03/24 职场文书
2016年共产党员个人承诺书
2016/03/24 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL