使用使用ajaxfileupload.js实现实现ajax上传文件上传文件php版版
无论是PHP,还是其他的服务端脚本都提供了文件上传功能,实现起来也比较简单。而利用JavaScript来配合,即可实现Ajax
方式的文件上传。虽然jQuery本身没有提供这样的简化函数,但有不少插件可以实现。其中,Phpletter.com提供的
ajaxfileupload.js是一个轻量的插件,而且编写方式与jQuery提供的全局方法$.post()非常相似,简单易用。
不过,该插件实在太简化了,除了可提供需上传文件的路径外,也就不能传递额外的值到后台服务端。所以,我修改了一下该
脚本,增加个一个data对象参数。
一、原理一、原理
我这里使用的是PHP作为服务端脚本,几乎在每本较少PHP的书上都会提到如何使用move_uploaded_file()方法来上传文件,
这里我就不再细说了。我想说的是,利用Ajax上传的原理。
因为一直在使用jQuery库,所以当想到Ajax时,第一反应就是试试$.post()方法,利用各选择器得到file文件框中的value值,然
后提交到后台服务端。当然,后来证明这是不行的。(正因为这问题,我还查了不少资料,网上还提供了不少ASP等方式的脚
本,真不知道该说什么好。。)
回到正题,要实现Ajax方式上传,其实并不难,方法也有不少。而本文提到的Phpletter.com的ajaxfileupload.js插件就是使用
iframe的方式。这也是在不使用JavaScript脚本时,要实现不刷新页面上传时常见的方法。(本博客bo-blog后台撰写日志就是
用该方法)
而ajaxfileupload.js插件也很简单,就是先利用jQuery的选择器获得file文件上传框中的文件路径值,然后动态的创建一个
iframe,并在里面建立一个新的file 文件框,提供post方式提交到后台。最后,返回结果到前台。
二、使用二、使用
ajaxfileupload.js插件的使用很简单。
前台HTML代码类似:
<script type="text/javascript">
$(#buttonUplod).click(function () {
$.ajaxFileUpload ({
url:'doajaxfileupload.php', //你处理上传文件的服务端
secureuri:false, //与页面处理代码中file相对应的ID值
fileElementId:'img',
dataType: 'json', //返回数据类型:text,xml,json,html,scritp,jsonp五种
success: function (data) {
alert(data.file_infor);
}
})
});
</script>
<input id="img" type="file" size="45" name="img" >
<button id="buttonUpload" onclick="return ajaxFileUpload();">Upload</button>
后台doajaxfileupload.php脚本:
<?php
$upFilePath = "../attachment/";
$ok=@move_uploaded_file($_FILES['img']['tmp_name'],$upFilePath);
if($ok === FALSE){
echo json_encode('file_infor'=>'上传失败');
}else{
echo json_encode('file_infor'=>'上传成功');
}
?>
为了测试,可以使用类似下面的方式保存传递过来的变量值:
$file_info = var_export($_FILES,true);
$ok = file_put_contents(“../attachment/file_info.txt”,$file_info);
if ($ok) exit(json_encode(‘file_infor’=>’上传成功’));
exit (json_encode(‘file_infor’=>’上传失败’));
※ 注意
请留意HTML代码文件框中的标记:
1. id=’img’是用于给ajaxfileupload.js插件的fileElementId:’img’识别的,jQuery选择器会利用该字符串获得文本框的值;
2. name=’img’是用于通过post方式提交到后台脚本时,PHP通过$_FILES[‘img’]读取上传文件的数据,若没有该值,$_FILES
变量为空;
所以,这两个值缺一不可,也不可混淆。
三、支持额外参数三、支持额外参数
评论0
最新资源