AjaxFileUpload是一个基于jquery开发的文件上传插件,之前有写过一篇使用方面的文章,颇受欢迎,后因业务需要,需要在一个页面上传多个文件,这才意识到AjaxFileUpload只是支持单文件的,那么改造一下吧,使其支持多文件上传(只做比较简单的示例,您完全可以将其改造得更为强大)。另外对于AjaxFileUpload的基本使用和需要注意的问题请参考文章:jquery插件之AjaxFileUpload
- <input id="thumbnail" class="upfileText" name="thumbnail" size="30" type="file" />
- <input id="buttonUpload0" class="button" onclick="return ajaxFileUpload(this);" type="button" value="上传" />
做一个“添加”按钮
- <div id="add_seriesArea"><input id="add_series" class="button" type="button" value="添加" /></div>
为该按钮绑定click事件:
下载: samplecode.txt
- function add_seriesInit(){
- var thumbStr = '<div class="thumbArea"><label class="label">缩略图片:</label><input id="thumbnail&" name="thumbnail&" class="upfileText" type="file" size="30" /><input id="buttonUpload&" class="button" onclick="return ajaxFileUpload(this);" type="button" value="上传" /></div>';
- $("#add_series").click(function(){
- series_c++;
- $("#add_seriesArea").before((thumbStr+hoverStr).replace(/&/g,series_c));
- });
- };
以上代码中,细心的你应该发现了其实就是通过一个添加按钮来生成多个上传文件的文件选择框和上传按钮,并且将原来的id=“buttonUpload” 和id=“thumbnail”替换成了buttonUpload0 buttonUpload1、thumbnail0、thumbnail1等系列值,为的是id不重复。同样的对ajaxFileUpload执行函数以及后台代码都要作修改。
改进后的php后台代码:
- //和作者提供的源代码不同,返回的是一个json格式的消息,SITE_ROOT是全局变量,定义的站点根目录
- $error = "";
- $msg = "";
- //$fileElementName 不再是写死的,需要从前台传入,以区别不同的file对象
- $fileElementName = $_GET["fileElementId"];
- if(!empty($_FILES[$fileElementName]['error']))
- {
- switch($_FILES[$fileElementName]['error'])
- {
- case '1':
- $error = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
- break;
- case '2':
- $error = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
- break;
- case '3':
- $error = 'The uploaded file was only partially uploaded';
- break;
- case '4':
- $error = 'No file was uploaded.';
- break;
- case '6':
- $error = 'Missing a temporary folder';
- break;
- case '7':
- $error = 'Failed to write file to disk';
- break;
- case '8':
- $error = 'File upload stopped by extension';
- break;
- case '999':
- default:
- $error = 'No error code avaiable';
- }
- }
- elseif(empty($_FILES[$fileElementName]['tmp_name']) || $_FILES[$fileElementName]['tmp_name'] == 'none')
- {
- $error = 'No file was uploaded..';
- }
- else
- {
- $dir = SITE_ROOT . "/upload_images/";
- $tstamp = strval(time()).strval(rand(100,999));
- $fname = $tstamp.substr($_FILES[$fileElementName]['name'],strrpos($_FILES[$fileElementName]['name'],"."));
- $msg = $fname;
- $f=$dir.$fname;
- if(strpos($fileElementName,"thumbnail") != false){
- if($_FILES[$fileElementName]['size']/1024 > 100){
- $msg = $fileElementName."overmaxsize";
- }
- }
- else{
- if(!move_uploaded_file($_FILES[$fileElementName]['tmp_name'],$f))
- {
- $error = "failed";
- $msg = "move file failed";
- }
- else{
- $size = getimagesize($f);
- $width = $size[0];
- $height = $size[1];
- if($width == "" && $height == ""){
- $error = "failed";
- $msg = "上传的图片不符合格式要求";
- }
- }
- }
- }
- echo "{";
- echo "error: '" . $error . "',\n";
- echo "msg: '" . $msg . "',\n";
- echo "width: '" . $width . "',\n";
- echo "height: '" . $height . "'\n";
- echo "}";
以上就是改造的核心内容,当然,你还可以根据自己的需求随心所欲的加以改变,上面的思路就是参数化写死的变量,多个值换以数组的方式来保存,多文件上传还会遇到一些诸如文件顺序的问题,会使问题复杂化,至于如何处理,主要看需求吧。
No Comments for this post
还没有评论。
Leave a comment