教你使用swfupload带进度条多文件上传

时间:2022-08-29 16:42:33

首先我们直接去github搜索swfupload.下面是下载地址

https://github.com/danifbento/SWFUpload


下载好了以后我们只需要swfupload.js和swfupload.swf,handler.js这个文件我们可以不用。我们自己参照着自己编写。


下面是我的demo代码。首先是html上传界面。

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus®">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<script type="text/javascript" src="__PUBLIC__/swfupload.js"></script>
<title>文件上传测试</title>
</head>
<body>

<buttton id="upload"></button>

<script>
var swfu;
window.onload = function () {
swfu = new SWFUpload({
// Backend Settings
upload_url: "__APP__/Upload/upload",
post_params: {},

// File Upload Settings
file_size_limit : "100 MB",// 2MB
file_types : "*.mp4",
file_types_description : "JPG Images",
file_upload_limit : 1,
file_queue_error_handler : fileQueueError,
file_dialog_complete_handler : fileDialogComplete,
upload_progress_handler : uploadProgress,
upload_error_handler : uploadError,
upload_success_handler : uploadSuccess,
upload_complete_handler : uploadComplete,

// Button Settings
button_image_url : "",
button_placeholder_id : "upload",
button_width: 100,
button_height: 40,
button_text : '<span>点击上传图片</span>',
//button_text_style : '.button { font-family: Helvetica, Arial, sans-serif; font-size: 12pt; } .buttonSmall { font-size: 10pt; }',
button_text_top_padding: 0,
button_text_left_padding: 18,
button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT,
button_cursor: SWFUpload.CURSOR.HAND,

// Flash Settings
flash_url : "__PUBLIC__/swfupload.swf",

custom_settings : {
upload_target : "divFileProgressContainer"
},

// Debug Settings
debug: false
});
};

function uploadProgress(file,load,total){
console.log("uploadProgress:目前加载"+load+" 总数:"+total);
}

function uploadError(file, errorCode, message){
console.log("uploadError:错误信息:"+message);
}

function uploadSuccess(file, serverData){
console.log("上传成功:"+serverData);
}

function uploadComplete(file){
console.log("上传完成");
}

function fileQueueError(file, errorCode, message) {
try {
var imageName = "error.gif";
var errorName = "";
if (errorCode === SWFUpload.errorCode_QUEUE_LIMIT_EXCEEDED) {
errorName = "You have attempted to queue too many files.";
}

if (errorName !== "") {
alert(errorName);
return;
}

switch (errorCode) {
case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
imageName = "zerobyte.gif";
break;
case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
imageName = "toobig.gif";
break;
case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
default:
alert(message);
break;
}

addImage("images/" + imageName);

} catch (ex) {
this.debug(ex);
}

}

function fileDialogComplete(numFilesSelected, numFilesQueued) {
try {
if (numFilesQueued > 0) {
this.startUpload();
}
} catch (ex) {
this.debug(ex);
}
}
</script>
</body>
</html>
handler.js里的内容我们已经直接写到了html里 所以不用引入handler.js了哦。

现在看看php后端上传代码。我采用的TP框架。

 public function upload(){
import('ORG.Net.UploadFile');
$upload = new UploadFile();// 实例化上传类
$upload->maxSize = 314572800000 ;// 设置附件上传大小
$upload->allowExts = array('mp4');// 设置附件上传类型
$upload->savePath = './Uploads/';// 设置附件上传目录
if(!$upload->upload()) {// 上传错误提示错误信息
echo $upload->getErrorMsg();
}else{// 上传成功 获取上传文件信息
echo "上传成功";
}
}
我们再来看看浏览器调试结果。

教你使用swfupload带进度条多文件上传

再看看上传完成的调试结果

教你使用swfupload带进度条多文件上传


借助bootstreap的进度条样式。我们可以很容易的计算出当前进度。算法为

var m_progress = parseInt(load / total * 100, 10); 
progress.text(m_progress+"%");
p.css("width",m_progress+"%");