swfupload是一个flash插件它可以结合php来快速实现图片文件无刷新上传,同时还可以批量上传图片,下面我来给大家介绍PHP swfupload图片文件上传实例代码有需要了解的中参考.
index.php文件,代码如下:
- <!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" >
- <head>
- <title>SWFUpload Demos - SWFObject Demo</title>
- <link href="../css/default.css" rel="stylesheet" type="text/css" />
- <script type="text/javascript" src="../swfupload/swfupload.js"></script>
- <script type="text/javascript" src="js/swfupload.swfobject.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>
- <script type="text/javascript">
- var swfu;
-
- SWFUpload.onload = function () {
- var settings = {
- flash_url : "../swfupload/swfupload.swf",
- upload_url: "upload.php",
- post_params: {
- "PHPSESSID" : "NONE",
- "HELLO-WORLD" : "Here I Am",
- ".what" : "OKAY"
- },
- file_size_limit : "100 MB",
- file_types : "*.jpg;*.gif;*.png;*.jpeg;",
- file_types_description : "All Files",
- file_upload_limit : 100,
- file_queue_limit : 0,
- custom_settings : {
- progressTarget : "fsUploadProgress",
- cancelButtonId : "btnCancel"
- },
- debug: false,
-
-
- button_image_url : "XPButtonUploadText_61x22.png",
- button_placeholder_id : "spanButtonPlaceholder",
- button_width: 61,
- button_height: 22,
-
-
- swfupload_loaded_handler : swfUploadLoaded,
- 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,
-
-
- minimum_flash_version : "9.0.28",
- swfupload_pre_load_handler : swfUploadPreLoad,
- swfupload_load_failed_handler : swfUploadLoadFailed
- };
-
- 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">
-
- <h2>SWFObject Demo</h2>
- <form id="form1" action="index.php" method="post" enctype="multipart/form-data">
- <p> This page demonstrates the SWFObject plugin. Do each of the following (one at a time) to see the plugin work: </p>
- <ul>
- <li>Uninstall your Flash Player or install a version less than 9.0.28</li>
- <li>Cause the SWF file to fail to load by deleting or renaming swfupload.swf (simulating a very slow or failed download)</li>
- <li>Disable JavaScript</li>
- </ul>
- <p>
- Each of these tests demontrate how these issues can be handled by SWFUpload and the SWFObject libraries.
- </p>
- <div id="divSWFUploadUI">
- <div class="fieldset flash" id="fsUploadProgress">
- <span class="legend">Upload Queue</span>
- </div>
- <p id="divStatus">0 Files Uploaded</p>
- <p>
- <span id="spanButtonPlaceholder"></span>
- <input id="btnCancel" type="button" value="Cancel All Uploads" disabled="disabled" style="margin-left: 2px; height: 22px; font-size: 8pt;" />
- <br />
- </p>
- </div>
- <noscript>
- <div style="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px;">
- We're sorry. SWFUpload could not load. You must have JavaScript enabled to enjoy SWFUpload.
- </div>
- </noscript>
- <div id="divLoadingContent" class="content" style="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px; display: none;">
- SWFUpload is loading. Please wait a moment...
- </div>
- <div id="divLongLoading" class="content" style="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px; display: none;">
- SWFUpload is taking a long time to load or the load has failed. Please make sure that the Flash Plugin is enabled and that a working version of the Adobe Flash Player is installed.
- </div>
- <div id="divAlternateContent" class="content" style="background-color: #FFFF66; border-top: solid 4px #FF9966; border-bottom: solid 4px #FF9966; margin: 10px 25px; padding: 10px 15px; display: none;">
-
- </div>
- </form>
- </div>
- </body>
- </html>
核心处理程序php代码,代码如下:
- if (isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) || $_FILES["Filedata"]["error"] != 0) {
- $upload_file = $_FILES['Filedata'];
- $file_info = pathinfo($upload_file['name']);
- $file_type = $file_info['extension'];
- $save = 'image/' . md5(uniqid($_FILES["Filedata"]['name'])) . '.' . $file_info['extension'];
- $name = $_FILES['Filedata']['tmp_name'];
-
- if (!move_uploaded_file($name, $save)) {
- exit;
- }
-
- $fileName = 'test.txt';
- $postData = var_export($file_info, true);
- $file = fopen('' . $fileName, "w");
- fwrite($file,$postData);
- fclose($file);
- }
swfUpload注意事项
swfuplaod在上传时,会新开一个进程,和原来的进程不一致,要解决这个问题,需要指定session_id,然后在登录页面判断,如果有post过来的session_id,那么就用函数session_id($_POST['PHP_SESSIONID'])指定一下.
上传页的JS里面,可以获取当前的SESSION_ID的,例如上传页的JS中,代码如下:
post_params: {"PHPSESSID": "<?php echo session_id(); ?>"},
在验证的判断页,代码如下:
if (isset($_POST["PHPSESSID"])) { session_id($_POST["PHPSESSID"]);}
这一段是网上的注释,在带有Session验证的网站后台中SWFUpload无法正常工作,这是因为SWFUpload在上传时相当于重新开辟了一个新的Session 进程,因此无法与原有程序的Session保持一致,这就需要在上传时传递原有程序的SessionID,根据它来“找回”其应有的Session. |