Uploadify插件的使用
Uploadify是一款优秀的文件上传插件。官方网站是:http://www.uploadify.com/download/
1.下载Uploadify插件,解压后如下图所示:

2.在HTML文件头部包含所需JS文件,CSS文件。记得包含JQuery
(具体路径根据自己的工程来定)
3.编写Uploadify的配置文件,比如 imageUpload.js
1 $(function() { 2 3 $('#photoname').uploadify({ 4 'swf' : PUBLIC+"/Js/lib/uploadify/uploadify.swf", 5 'uploader' : PUBLIC+"/Js/lib/uploadify/uploadify.php", 6 'cancelImg' : PUBLIC+"/Js/lib/uploadify/uploadify-cancel.png", 7 'debug' : true, 8 'buttonText' : '选择照片', 9 'method' : 'post', 10 'buttonClass' : 'upload_button', 11 'fileTypeDesc' : '图片文件', 12 'fileTypeExts' : '*.gif;*.jpg;*.png;*.bmp', 13 'formData' : {'public_path' : PUBLIC}, 14 'multi' : false, 15 16 'onUploadComplete': function(file){ 17 18 }, 19 20 /** 21 * 上传成功后触发事件 22 */ 23 'onUploadSuccess' : function(file, data, response) { 24 //参数data保存的是上传后的图片的路径 25 //alert(data); 26 //$('#photo').css("background-color","#f00"); 27 28 var path=PUBLIC+"/Uploads/Photo/"+data; 29 $('#photo>img').attr("src",path); 30 $('#photoname_hidden').val(data); 31 }, 32 }); 33 //alert(PUBLIC); 34 });
关于上面的代码,说明如下:
- swf指明SWF文件路径
- uploader指明后台处理文件路径
- cancelImg指明取消按钮图片路径
- debug开启调试模式
- buttonText按钮上的文字
- method表示上传表单采用的方式
- buttonClass为按钮添加额外的样式类
- fileTypeDesc打开对话框的提示信息
- fileTypeExts允许上传的文件扩展名
- formData上传文件之外额外上传的表单数据
- multi是否支持多文件上传
- onUploadSuccess上传成功后执行的回调函数
4.在HTML中的表单代码片段如下:
1 <p> 2 <label class="label">照片</label> 3 <table><tr><td> 4 <div id="photo"><img src="__PUBLIC__/Uploads/Photo/default.jpg"/></div> 5 </td></tr></table> 6 <input class="text-input small-input" type="file" name="photo" id="photoname" /> 7 </p> 8 9 <input type="hidden" name="photoname" id="photoname_hidden"/>
5.服务器端PHP代码Uploadify.php
1 <?php 2 3 4 $targetFolder = $_POST['public_path'].'/Uploads/Photo/'; //上传的目标路径 5 6 if (!empty($_FILES)) { 7 $tempFile = $_FILES['Filedata']['tmp_name']; 8 $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder; 9 $targetFile = rtrim($targetPath,'/') . '/' . md5($_FILES['Filedata']['name']); 10 11 // Validate the file type 12 $fileTypes = array('jpg','jpeg','gif','png','bmp'); // File extensions 13 $fileParts = pathinfo($_FILES['Filedata']['name']); 14 15 //查看文件的名字符串的编码方式 16 $encode = mb_detect_encoding($targetFile, array("UTF-8","GBK","ASCII","GB2312")); 17 //echo $tempFile.'<br>'; 18 //echo $targetFile.'<br>'; 19 //echo $encode.'<br>'; 20 /* 21 if ($encode == "UTF-8"){ 22 $targetFile = iconv("UTF-8","GBK",$targetFile); 23 } 24 */ 25 26 if (in_array($fileParts['extension'],$fileTypes)) { 27 move_uploaded_file($tempFile,$targetFile); 28 echo md5($_FILES['Filedata']['name']); 29 30 } else { 31 echo '您好,文件类型不允许!'; 32 } 33 } 34 ?>
如果上传的文件名含有中文,可以使用mb_detect_encoding查看文件名的编码方式然后转码,由于我把文件名进行md5()了,故无需考虑编码方式了。
---------------------------------------------------------------------------------------------------------------------------
最后看一下实际的页面表现

这里需要注意的是服务端PHP文件中echo出的数据将会出现在客户端Uploadify配置文件uploadImage.js中的onUploadSuccess()事件中的data参数里。可以在onUploadSuccess事件回调函数中 调用alert(data);来查看服务器端脚本的输出信息。
由于我在服务器端脚本中:
1 echo md5($_FILES['Filedata']['name']);
因此,在JS文件中的UploadSuccess事件中可以更新<img>标签的src属性,来显示刚刚上传的图片。

由于这些数据的传递都是以Ajax方式进行的,故整个过程没有提交页面。如果想把图片文件名通过表单的形式提交,那么不妨加一个hidden类型的input元素。然后还是在onUploadSuccess事件中更新其value即可。
浙公网安备 33010602011771号