Uploadify与php使用详解
提到上传,就会想到file标签。但是如果文件过大,或者多个文件的时候,这个html标签就有点力不从心了,下面主要讨论php后台来处理多线程上传工具。正因为用自带的那个标签解决不了,所以就有了今天的这个Uploadify这个插件的诞生。
uploadfiy这个插件是基于js里面的jquery库写的。结合了ajax和flash,实现了这个多线程上传的功能。
现在最新版为3.2,下载地址为:http://www.uploadify.com/wp-content/uploads/files/uploadify.zip。璞玉使用的是2.9的版本,新版本不一定是最好的,最适合自己的才是最好的。下面来介绍一下uploadfiy的使用方法。
第一步:下载好压缩包之后,解压里面的文件:
- jquery.uploadify.js (主要插件)
- jquery-1.7.2.min.js (jquery主件)
- uploadify.swf (flash上传插件)
- uploadify.css (上传样式表)
- uploadify-cancel.png (flash上传按钮图标)
- uploadify.php (上传处理数据)
- uploads文件夹 (默认保存上传文件目录)
第二步:写上传接口
在你需要上传的页面写下如下js:
首先引入js/css
<link href="css/uploadify.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> <script type="text/javascript" src="js/jquery.uploadify.js"></script>
然后定义一些初始化变量,后面都写有注释
<script type="text/javascript"> $(document).ready(function() { $("#fileInput2").uploadify({ 'uploader': 'js/uploadify.swf',//所需要的flash文件 'cancelImg': 'cancel.png',//单个取消上传的图片 'script': 'js/uploadify.php',//实现上传的程序 'folder': 'uploads',//服务端的上传目录 //'auto': true,//自动上传 'multi': true,//是否多文件上传 //'checkScript': 'js/check.php',//验证 ,服务端的 'displayData': 'speed',//进度条的显示方式 //'fileDesc': 'Image(*.jpg;*.gif;*.png)',//对话框的文件类型描述 'fileExt': '*.jpg;*.jpeg;*.gif;*.png',//可上传的文件类型 //'sizeLimit': 999999 ,//限制上传文件的大小 'simUploadLimit' :3, //并发上传数据 'queueSizeLimit' :20, //可上传的文件个数 'buttonText' :'文件上传',//通过文字替换钮扣上的文字 'buttonImg': 'css/images/browseBtn.png',//替换上传钮扣 'width': 80,//buttonImg的大小 'height': 24,// 'rollover': true,//button是否变换 onComplete: function (evt, queueID, fileObj, response, data) { //alert("Successfully uploaded: "+fileObj.filePath); //alert(response); getResult(response);//获得上传的文件路径 } //onError: function(errorObj) { // alert(errorObj.info+" "+errorObj.type); //} }); }); </script>
下面这个是ajax 接受后台数据处理返回来的值,然后追加到前台上传页面显示上传的文件名和地址
<script type="text/javascript"> function getResult(content){ //通过上传的图片来动态生成text来保存路径 var board = document.getElementById("divTxt"); board.style.display=""; var newInput = document.createElement("input"); newInput.type = "text"; newInput.size = "45"; newInput.name="myFilePath[]"; var obj = board.appendChild(newInput); var br= document.createElement("br"); board.appendChild(br); obj.value=content; } </script>
最后是在body里面添加调用标签<fieldset style="border: 1px solid #CDCDCD; padding: 8px; padding-bottom:0px; margin: 8px 0"> <legend> <strong> 多文件上传</strong></legend> <div><input id="fileInput2" name="fileInput2" type="file" /> <input type="button" value="确定上传" onclick="javascript:$('#fileInput2').uploadifyUpload();"> || <a href="javascript:$('#fileInput2').uploadifyClearQueue();">清除上传列表</a></div> <p></p> </fieldset> <FORM name="form2" METHOD=POST ACTION="db.php"> <div id="divTxt" style="display:none"><span style="color:red"><strong>已经上传的图片有:</strong></span><br></div><br> <INPUT TYPE="submit" value="提 交"> </FORM>
第三步:定义uploadify处理后台, 默认的是uploadify.php页面
璞玉这里就简单的写下获取文件名称的例子
if (!empty($_FILES)) { echo $_FILES['Filedata']['name']; }具体说怎么处理这里的文件,是复制到哪儿还是怎么处理,看各位的需求了。直接在这个后台写就行了
第四步:打开页面然后去上传一个试试
是不是就完成了呢?
关于uploadify动态传递表单元素 的问题之前有说过。
可以点击去看看:www.pooy.net/jquery-uploadify-scriptdata.html.uploadify动态传递表单元素。关于uploadify 参数列表(已翻译)。
正版软件分享
学习学习。
ikasa007
😳 你好,能不能所有源代码打包发我邮箱下,谢谢
pooy
有时间整理一下,不过之前写过一个dome打包了可以直接下载的。uploadify3.1 PHP+formData动态传值 Dome下载
多问多思考
➡ 💡 如何实现上传图片的预览 和 获取uploadify.php里面我重新命名过的文件名??? 求讲解!谢谢!
pooy
当图片传递到处理后台之后,另存为的同时,利用imagemagick来裁剪,或者用PHP自带的函数来生成缩略图,然后echo到前台,在前台使用js或者jquery追加一个img标签即可!
uploadify 后台处理:http://www.pooy.net/uploadify-houtai.html
php处理图片之三php处理图片函数:http://www.pooy.net/phpphp.html
阿远
😛
你好,我有个疑问,我用你的这个插件整合到我项目中了。现在又个问题,就是我生成了预览图片,有个删除的功能,我可以实现删除预览图,以及img_id_upload 数据中的元素,但是删除完成后,再上传,会报Some files were not added to the queue:
The number of files selected exceeds the remaining upload limit (0)错误。这个应该是图片数量超出限制了,那问题是,我删除img_id_upload数组中的元素,怎么还会报错呢,他这个长度不是根据img_id_upload来判断的吗?求解,我JS不是太懂~~
pooy
删除之后,初始化一下即可!
蟑螂ipis
为什么我的flash按钮点击不弹出选择文件呢?
pooy
可能是浏览器禁止了flash!
adong
我的也不行啊,怎么按都弹不出选择框,应该不爽浏览器禁止的问题,在官网的demo是可以的,就是按照官网的例子自己做了,不行,可以发个做好的demo给我吗?[email protected],感激不尽
pooy
不要PHP?那你怎么去保存呢?demo文章里面已经给出了下载地址!
adong
我现在是点击不能出现对话框 😥 😥 😥 ,所以想要一个可以点击出对话框的html demo
water6000
那是你的路径有问题,所以才没有出来,还有就是和浏览器有关系!
pooy
呵呵,不是我的路径有问题。我的路径是相对于我的项目而言。可能在你的项目中路径就要变成相对于你的项目了。
adong
如果可以的话,我只要个html的demo,不要php的
孟小宇
demo没问题,添加到醒目 里面就不行了,不会自动加载插件
孟小宇
项目,不是醒目
pooy
检查引用的文件是否路径都正常!
将军
按照博主给的方式, 有个疑问.当前是form表单没有提交图片也能上传. 如果用户不放弃填写表单呢?该怎么办呢?
pooy
上传,跟提交表单是两回事、
上传是通过ajax自动触发提交的 。
wmy
赞一个
pooy
多谢支持!
woniu
Uncaught Call to GetStats failed
3.2版本,上传成功后,会报这个错误,请问下,是什么原因呢,网上也没有找到相关解决的方法,请指点下
pooy
什么浏览器
上传的什么文件
截图发给我邮箱,我有空试试看
dxx
谷歌。上传的是mpp文件
silence
整合到项目中的时候当点击上传的时候出现HTTP error 500 的错误是怎么回事
pooy
代码有错误,可以断点调试