uploadify 后台处理
前两天有网友,问我,关于jquery uploadify处理后台的问题。说如何判断文件的存在?在这里璞玉为大家简单的分析一下uploadify后台处理程序的写法。
首先使用:
if (!empty($_FILES))
来判断是否有文件上次。如果有的话,接着去做接下来的事情,比如把上传的文件从临时文件移动到系统生成的保存文件夹中。如何判断文件的存在?这其实很简单。如果说您把上传的所以的文件都放在了一个大的目录里面(这点不可取,既不安全,又不利于查找。在linux系统下面,文件夹里面的文件超过1000个以后就明显的慢了很多。所以还是分开存储)。
如下:
$_FILES['Filedata']['name'];
根据上面那句话就能得出文件的名字。然后用file_exists去判断是否存在即可、
不过在这里重点说下uploadify后台的处理写法.
首先用户点击上传之后,图片就会批量的上传到后台。后台就要一个个去依次处理。然后把结果跟状态返回给前台客户看到。
下面就以璞玉之前写的《jquery.uploadify动态传递表单元素》为例,现在把后台处理程序贴出来,给大伙学习下:
/******** uploadify 后台处理程序 Date:2012-06-24 by: pooy blog:www.pooy.net ①:把上次完成的图片文件名返回给前台 ②:把上次完成的图片裁剪缩略图 *******/ //首先判断文件是否为空 if (!empty($_FILES)) { //把上次完成的图片文件名返回给前台 //'name' 就是之前写 《jquery.uploadify动态传递表单元素》里面动态附加值 echo $_FILES['Filedata']['name']; $tmpDir = $_POST['note']; $fileName = iconv("UTF-8","GB2312",$_FILES["Filedata"]["name"]); //echo $fileName; $file = $_FILES["Filedata"]["tmp_name"]; //fwrite($f,$tmpDir); //复制原图 $path = "uptemp/".$tmpDir."_org/"; //echo $path; if(!is_dir($path)) mkdir($path); if (copy($file, $path . $fileName)){ $_ft =$file; }else{ $_ft ="no"; } //生成缩略图 $fileName = str_replace(" ","\ ",$fileName); //$fileName = iconv("UTF-8","GB2312",$_GET['newname']); $pathTmb = "uptemp/".$tmpDir."/"; $extPos = strrpos($fileName,"."); $secfile= substr($fileName,0,$extPos); $tmbName = $secfile.".jpg"; if(!is_dir($pathTmb)) mkdir($pathTmb); //echo $pathTmb."<br>"; if(!file_exists($pathTmb.$tmbName)){ //IMAGEMAGICKDIR这个就要根据您自己装的imagemagick目录来写了 $cmd = IMAGEMAGICKDIR."/convert -resize 110x110 ". $path.$fileName." ".$pathTmb.$tmbName; //echo $cmd; system( $cmd ); } $tmbName = str_replace("\ "," ",$tmbName); readfile($pathTmb.$tmbName); exit; //转码 $fileName = iconv("GB2312","UTF-8",$secfile); } // 获取文件扩展名 // @param $fileName 上传文件的原文件名 function getExt($fileName){ $ext = explode(".", $fileName); $ext = $ext[count($ext) - 1]; return strtolower($ext); }
原理都是把$_FILES 临时文件复制到本地目录进行存储,然后再使用IMAGEMAGICK裁剪什么的。有问题可以继续交流。有时间把《uploadify 3.2使用详解》也充实一下。
关于jquery uploadify 参数问题请移步:《Uploadify与php使用详解 》。
关于jquery uploadify 动态传值问题请移步:《jquery.uploadify动态传递表单元素 》。
bengben
感谢你的uploadify文章,对我才学非常重要,希望多指点。
bengben
不知道你那里有没有bug,比如我设置最大的数量是4,那么我在选项框中一个一个地选,提示却是limi(0)
pooy
我这边没有bug,这个是我之前部署到项目里面的,我拿出来的一个demo!请仔细检查一下朋友!
asstudio
非常感谢您的教程,有一个问题就是 接收返回值只能是单个文件名什么的,能不能搞成返回一个数组。接收后对应到表单中,便于提交数据库!望解答
比如:
‘onUploadSuccess’ : function(file, data, response) {//每次成功上传后执行的回调函数,从服务端返回数据到前端
img_id_upload[i]=data;
i++;
//alert(data);
document.getElementById(“name”).value = data;
document.getElementById(“size”).value = data;
document.getElementById(“type”).value = data;
pooy
这个是完全可以的,主要是你处理的后台如何组织数据了。建议使用JSON,如果对JSON有任何疑问,可以查看《php json使用说明详解》
water6000
问下,当前端选择多个文件的时候,后台如何针对前端每个文件进行处理呢?
paysent
有1个问题,就是php端判断处理后,我想返回一个错误,比如echo json_encode(array(‘error’=>1)) 如何让前端进度条那里显示错误的样式?
pooy
‘onError’: function(event, queueID, fileObj,errorObj){
alert(errorObj.type + “Error:” + errorObj.info);
}
water6000
问下,为什么mkdir无法创建目录,在uploadify中提示创建目录失败,文件无法上传,我的目录是中文的!
pooy
切记,不要使用中文做目录名称。
nadongjiao
您好,我想问一个问题,就是使用uploadify控件上传的时候,上传到了一半,网络中断,这时候怎么处理,我测试过,网络中断,依然上传成功,但是服务器没有该文件,
最近做项目,用到uploadify控件,很期待你的回答。
[email protected] 可以邮件给我吗?谢谢了。
pooy
网络中断,这个还没有尝试过。
中断瞬间,uploadify 会提示 500
water6000
如何上传10G的文件,我修改了php上传的限制,也修改了uploadify的参数,测试返回,提示上传成功,但实际上没有上传任何东西,因为返回的值没有得到上传文件的类型,上传的是个压缩文件,请问,如何整呢???
pooy
10G的文件不建议使用这个。
King
如果.net有类似的这样一个就好了
辛苦!
pooy
抱歉,没有接触过.net。你理解这个逻辑,之后应该也能写出来的。
a_white_sand
pooy,你好,我用uploadify上传文件时,文件类型全部是【application/octet-stream】,不管图片还是word等,怎么获得文件原来的类型?
pooy
在FILE函数里面有的。直接打印这个函数就能看到的
Conlin
if (!empty($_FILES) && $_POST[‘token’] == $verifyToken) {
… …
}
请教下:3.2.1版本 后台处理文件中,
$_POST[‘token’] == $verifyToken 这个是判断 什么用的
pooy
这个是针对上传文件后台的校验。如果没有这一步,那么人人都能模拟POST提交了。
小嘉
还有一个问题,提交之是用ajax触发,’onUploadSuccess’ : function(file, data, response) {}这个函数中的我alert 只能弹出 data 就是 uploadify中的echo内容,我想在index.php页面 获得这处理上传后的新文件名和路径,然后写入数据库,怎么样做呢?还有就是多文件上传,怎么样获得所有的文件信息。希望您能帮我看看 新手上路,多多帮忙啊 谢谢
pooy
解析JSON 然后直接存就好了
abc
急急急
我剛學php,,js,只會貼代碼
請問我有一個表單,裡面有輸入框和其他信息及上存圖片功能,請問如何將上存圖片的路徑和表格一起提交去數據庫
求完整代碼
注:主要是如何取圖片路徑和如何將路徑放在表格上一起提交
pooy
解决了吗?