为了浏览器兼容,js目前需要借助flash的力量实现文件异步上传。swfupload是用使用最广泛的文件上传flash。
文件目录:
/test.html 上传页面,表单所在页面
/test.php 处理上传的controller
/swfupload/swfupload.js 此文件夹中放swfupload相关资源
/swfupload/handlers.js
/swfupload/swfupload.swf
/upfiles/ 上传文件的存放目录
test.html
<!DOCTYPE html> <html> <head> <title>异步上传文件demo</title> <!-- 导入相关资源 --> <script type="text/javascript" src="swfupload/swfupload.js"></script> <script type="text/javascript" src="swfupload/handlers.js"></script> <script type="text/javascript"> var swfu; window.onload = function() { var settings = { flash_url : "swfupload/swfupload.swf", //上传flash位置 upload_url: "test.php", //接受上传的服务端脚本 file_size_limit : "100 MB", //上传文件大小限制 file_post_name : "upfile", //服务端接受文件名,相当于input name file_types : "*.*", //上传文件类型 file_types_description : "All Files", //上传文件类型描述 file_upload_limit : 100, //上传文件数限制 file_queue_limit : 0, custom_settings : { cancelButtonId : "btnCancel" }, debug: false, // Button settings //button_image_url: "about:blank", //可以为上传按钮设背景图 button_width: "100", //上传按钮宽 button_height: "30", //上传按钮高 button_placeholder_id: "spanButtonPlaceHolder", //上传按钮ID button_text: '<span class="theFont">上传文件</span>', //按钮文本和样式 button_text_style: ".theFont { font-size: 14; text-align:center;}", swfupload_preload_handler : preLoad, swfupload_load_failed_handler : loadFailed, 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 : uploadErrorCo, //以下三个函数自定义,出错,成功,完成后做什么,其它的不用管 upload_success_handler : uploadSuccessCo, upload_complete_handler : uploadCompleteCo }; swfu = new SWFUpload(settings); }; function uploadErrorCo(data){ alert("上传失败"); } function uploadSuccessCo(data){ document.getElementById("uploadedFile").innerHTML = data.name; } function uploadCompleteCo(data){ } </script> </head> <body> <div id="content"> <form id="form1" action="test.php" method="post" enctype="multipart/form-data"> <span id="spanButtonPlaceHolder"></span> <span style="font-size: 14px; vertical-align:top; display:inline-block; width:100px; height:30px; text-align:center;" id="uploadedFile"></span> <!-- 取消 --> <button style="display:none;" id="btnCancel">取消</button> </form> </div> </body> </html>
test.php
<?php var_dump($_FILES); if(isset($_FILES['upfile']) && $_FILES['upfile']['error']>0){ echo '上传出错'; }else{ move_uploaded_file($_FILES["upfile"]["tmp_name"],"upfiles/".$_FILES["upfile"]["name"]); } ?>
如此看来,swfupload.swf并不是根据php的返回结果确定是否已上传成功。或者是我不清楚如果判断。
用swfupload上传能做到"比较"炫,可以一次上传多个文件,可以显示进度,可以取消等
另,swfupload资源下载点这里