此插件主要提供带进度条的文件上传功能,它依赖于 Ajax Form 插件。
1). 在
head
中导入css和js文件
<link href="css/uploadfile.min.css"rel="stylesheet">
<script src="js/jquery-1.10.2.min.js"></script>
<script src="js/jquery.uploadfile.min.js"></script>
body
中添加一个div标签来处理文件上传
<div id="fileuploader">upload</div>
document
准备就绪,初始化插件 .
<script>
$(document).ready(function()
{
$("#fileuploader").uploadFile({
url:"YOUR_FILE_UPLOAD_URL",
fileName:"myfile"
});
});
</script>
$("#singleupload1").uploadFile({
url:"php/upload.php"
});
结果:
$("#singleupload2").uploadFile({
url:"php/upload.php",
allowedTypes:"png,gif,jpg,jpeg",
fileName:"myfile"
});
结果:
var uploadObj = $("#advancedUpload").uploadFile({
url:"php/upload.php",
multiple:true,
autoSubmit:true,
fileName:"myfile",
formData: {"name":"Ravi","age":31},
maxFileSize:1024*100,
maxFileCount:1,
dynamicFormData: function()
{
var data ={ location:"INDIA"}
return data;
},
showStatusAfterSuccess:false,
dragDropStr: "<span><b>将文件拖拽至此处</b></span>",
abortStr:"上传被拒绝",
cancelStr:"取消",
doneStr:"完成",
multiDragErrorStr: "奥 & 拖拽的大多了.",
extErrorStr:"文件错误:",
sizeErrorStr:"文件太大了:",
uploadErrorStr:"上传失败!"
});
$("#startUpload").click(function()
{
uploadObj.startUpload();
});
$("#deleteFileUpload").uploadFile({
url: "upload.php",
dragDrop: true,
fileName: "myfile",
returnType: "json",
showDelete: true,
deleteCallback: function (data, pd) {
for (var i = 0; i < data.length; i++) {
$.post("delete.php", {op: "delete",name: data[i]},
function (resp,textStatus, jqXHR) {
//Show Message
alert("File Deleted");
});
}
pd.statusbar.hide(); //可选.
}
});
结果:
$("#multipleupload").uploadFile({
url:"php/upload.php",
multiple:true,
fileName:"myfile"
});
$("#eventsupload").uploadFile({
url:"php/upload.php",
multiple:true,
fileName:"myfile",
onSubmit:function(files)
{
$("#eventsmessage").html($("#eventsmessage").html()+"<br/>Submitting:"+JSON.stringify(files));
},
onSuccess:function(files,data,xhr)
{
$("#eventsmessage").html($("#eventsmessage").html()+"<br/>Success for: "+JSON.stringify(data));
},
afterUploadAll:function()
{
$("#eventsmessage").html($("#eventsmessage").html()+"<br/>All files are uploaded");
},
onError: function(files,status,errMsg)
{
$("#eventsmessage").html($("#eventsmessage").html()+"<br/>Error for: "+JSON.stringify(files));
}
});
$("#stylingupload1").uploadFile({
url:"php/upload.php",
multiple:true,
fileName:"myfile",
showStatusAfterSuccess:false,
showAbort:false,
showDone:false,
});
$("#stylingupload2").uploadFile({
url:"php/upload.php",
multiple:true,
fileName:"myfile",
showStatusAfterSuccess:false,
showAbort:false,
showDone:false,
uploadButtonClass:"ajax-file-upload-green"
});
uploadFile
创建Ajax表单并上传文件至服务器
var uploadObj = $("#uploadDivId").uploadFile(options);.
startUpload
上传所有已选择的文件,当
autoSubmit
设置为
false时使用这个函数
.
uploadObj.startUpload();
url
服务端URL地址,用来处理上传的文件
method
上传表单的方法类型
POST
或者
GET
. 默认为
POST
enctype
上传表单的 enctype. 默认为
multipart/form-data
.
formData
上传文件时会被一起发送的json对象.
data: { key1: 'value1', key2: 'value2' }
returnType
期望响应返回的数据类型. 可以是以下中的一个:
null
,
'xml'
,
'script'
, or
'json'
. returnType 选项明确了服务端如何处理响应. 支持以下几种数据格式:
xml
: 如果returnType 等于 'xml' 那么服务端将响应的数据转换成xml格式,并且如果指定了'success' 回调函数,那么它将会传进responseXML数据值
json
: 如果returnType 等于'json' ,那么服务端的响应将会被evaluted并且会被传递给 'success'回调函数(如果有指定的话)
script
: 如果returnType 等于 'script',那么服务端的响应将被evaluated在全局上下文中。
allowedTypes
用逗号隔开独立的文件后缀名. 默认为
"*"
. 例如:
"jpg,png,gif"
fileName
输入框中的文件名.默认为
file
multiple
如果设置为
true
, 那么允许选择多文件. 默认为
false
maxFileSize
允许支持的最大文件大小(按字节计算).
maxFileCount
允许上传的最大文件数量.
autoSubmit
如果设置为
true
, 文件将自动上传. 否则你需要手动调用
.startUpload
函数. 默认为
true
showCancel
如果设置为
false
, Cancel按钮被会被隐藏当
autoSubmit
为false时. 默认为
true
showAbort
如果设置为
false
, Abort在上传文件时将会被隐藏. 默认为
true
showDone
如果设置为
false
, Done按钮在上传完毕后将会被隐藏. 默认为
true
showDelete
如果设置为
true
, Delete按钮当在上传完毕后将会出现. 默认为
false
,You need to implement
deleteCallback()
function.
showProgress
如果设置为
true
, 将会显示进度. 默认为
false
showFileCounter
如果设置为
true
, 将显示文件的计数. 默认为
true
文件计数可以通过
fileCounterStyle
改变. 默认为
).
showStatusAfterSuccess
如果设置为
false
, status框在上传完毕后将隐藏. 默认为
true
onSelect
当文件被选中或者被拖进来时将会调用此函数
onSelect:function(files) {
files[0].name;
return true; //允许文件上传.
}
onSubmit
在文件上传之前会被调用.
onSubmit:function(files) {
//files : 列出需要上传的文件
//return false; 停止上传
}
onSuccess
当文件上传成功时将会被调用.
onSuccess:function(files,data,xhr) {
//files: 列出文件
//data: 服务端的响应
//xhr : jquery的 xhr 对象
}
afterUploadAll
当文件上床完毕后将会被调用.
afterUploadAll:function() { }
onError
文件上传失败后将会被调用.
onError: function(files,status,errMsg) {
//files: 列出文件
//status: 错误状态
//errMsg: 错误信息
}
deleteCallback
当用户点击Delete按钮之后将会被调用。
deleteCallback: function(data,pd)
{
for(var i=0;i<data.length;i++)
{
$.post("delete.php",{op:"delete",name:data[i]},
function(resp, textStatus, jqXHR)
{
//Show Message
alert("File Deleted");
});
}
pd.statusbar.hide(); //可以选择隐藏或不隐藏.
}
uploadButtonClass
上传按钮样式. 默认为
ajax-file-upload
<?php
$output_dir = "uploads/";
if(isset($_FILES["myfile"]))
{
$ret = array();
$error =$_FILES["myfile"]["error"];
//需要处理这两种情况
//如果浏览器不支持多文件的序列化,请使用FormData()
if(!is_array($_FILES["myfile"]["name"])) //单个文件
{
$fileName = $_FILES["myfile"]["name"];
move_uploaded_file($_FILES["myfile"]["tmp_name"],$output_dir.$fileName);
$ret[]= $fileName;
}
else //多个文件, file[]
{
$fileCount = count($_FILES["myfile"]["name"]);
for($i=0; $i < $fileCount; $i++)
{
$fileName = $_FILES["myfile"]["name"][$i];
move_uploaded_file($_FILES["myfile"]["tmp_name"][$i],$output_dir.$fileName);
$ret[]= $fileName;
}
}
echo json_encode($ret);
}
?>
<?php
$output_dir = "uploads/";
if(isset($_POST["op"]) && $_POST["op"] == "delete" && isset($_POST['name']))
{
$fileName =$_POST['name'];
$filePath = $output_dir. $fileName;
if (file_exists($filePath))
{
unlink($filePath);
}
echo "Deleted File ".$fileName."<br>";
}
?>
max_file_uploads = 2000
upload_max_filesize = 40000M
max_input_vars =10000
post_max_size = 40000M
php_value suhosin.post.max_vars 10000
php_value suhosin.request.max_vars 10000
php_value suhosin.get.max_array_depth 2000
php_value suhosin.get.max_vars 10000
php_value suhosin.upload.max_uploads 2000