大至设置介绍如下:
//![CDATA[
var swfu; //先定义swfu, 因为这个是对象,其它地主可以会用到.所有放在全局里使用了.
$(function(){
swfu = new SWFUpload({
// Backend settings
upload_url: "/upload/documentget",
// Flash file settings
file_size_limit : "100 MB",
file_types : "*.doc;*.docx;*.pdf;*.xls;*.xlsx;*.zip", // or you could use something like: "*.doc;*.wpd;*.pdf",
file_types_description : "DOC, DOCX, PDF, XLS, XSLX or ZIP File",
file_upload_limit : "0",
file_queue_limit : "1",
// Event handler settings
// swfupload_loaded_handler : swfUploadLoaded,
file_dialog_start_handler: fileDialogStart,
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,
// Button Settings
button_image_url : "/images/upload.png",
button_placeholder_id : "btnBrowse",
button_width: 132,
button_height: 24,
button_window_mode : SWFUpload.WINDOW_MODE.TRANSPARENT, //注册这里的环节,Firefox下.会有bug.当你的flash透明时.弹出的文件选择窗口参数会被修改,如:当你再点击上传按钮.此窗口会被关闭,接下来会卡死你了.呵呵 .所以在做透明按钮里要全面考虑.
// Flash Settings
flash_url : "/swf/swfupload.swf",
custom_settings : {
progress_target : "fsUploadProgress",
upload_successful : false
},
// Debug settings
debug: false
});
//]]>
文件调用成功后:ajax 处理.
upload_complete_handler : function(file) {
if(file["filestatus"] == -4){ //这里很重要,当文件返回时,如出现i/o 或 404页面找不到情况要判断是否文件上传成功.
arrFiles.push(file.name);
}
if (this.getStats().files_queued === 0) {
document.getElementById(this.customSettings.cancelButtonId).disabled = true;
}
},
queue_complete_handler : function(numFilesUploaded) {
var status = document.getElementById("divStatus");
status.innerHTML = numFilesUploaded + " file" + (numFilesUploaded === 1 ? "" : "s") + " uploaded.";
var arrId = $("#dialogUploadFile").data("arrId"),
folder = $("#dialogUploadFile").data("folder", folder),
Url = "ajax.php",
oData = {id: arrId, arrFiles: arrFiles, folder: folder};
if(arrFiles.length == 0){
return;
}
Utils.Server.XHR(oData, Url, function(json){
if(json.status == "success"){
Utils.Server.alertBox(json);
$.pwrd.alertBox("Upload successuflly!");
$("#dialogUploadFile").hide();
$("#fsUploadProgress .progressWrapper").remove();
arrFiles = [];
}
});
}
再从安全角度出发:
说实话,swfupload这个上传组件是相当不错的
能上传大文件,带进度条,可以多文件上传等等。。。
可是在firefox中用它上传的时候就会有问题(当然这也不能怪swfupload,根本原因还是flash player身上)
什么问题呢?
"在非ie内核的浏览期里边swf不能发送cookie"
也就是说,比如你在firefox里面使用swfupload上传文件,如果上传的时候需要做登录验证(这个登录验证是基于cookie或者session),就会出问题。
至于你遇没遇到,反正我是遇到了。
我的解决办法就是:
post_params : {
"swfAuthId" : ´<?php echo $sessionId;?>´,
"authKey" : ´<?php echo $authKey;?>´
},
swfupload在上传文件的时候再传递两个参数,这两个参数是怎么来的呢?
<?php
$sessionId = session_id().time();
$systemKey = ´asdfasdfasdfasdfasdfs´; //这个是随即生成的一个字符串,不会变
$authKey = md5($systemKey.$sessionId);
?>
然后在上传文件的时候判断
<?php
if($_POST[´authKey´] !== md5($systemKey.$_POST[´swfAuthId´]){
die(´error!´);
}
?>
loading