昨天做了一天的ajax效果的图片上传,就是想让自己学的更加的精一些,所以看了很多第三方的控件,最后还是选择了uploadify这个控件,主要原因是比较容易上手。
首先我们先参考别人的资料(我自己整理了一下)
可选项
事件
(函数) onAllComplete 当上传队列中的所有文件都完成上传时触发。 (函数) onCancel 当从上传队列每移除一个文件时触发一次。 (函数) onCheck 在上传开始之前,如果检测到一个同名文件时触发。 (函数) onClearQueue 当uploadifyClearQueue()方法被调用时触发。 (函数) onComplete 每完成一次文件上传时触发一次。 (函数) onError 当上传返回错误时触发。 (函数) onInit 当Uploadify实例被载入时触发。 (函数) onOpen 当上传队列中的一个文件开始上传时就触发一次。 (函数) onProgress 在上传过程中触发。 (函数) onQueueFull 当文件数量达到上传队列限制时触发。 (函数) onSelect 每向上传队列添加一个文件时触发。 (函数) onSelectOnce 每向上传队列添加一个或一组文件时触发。 (函数) onSWFReady 当flash文件载入完成时触发。
方法
.uploadify() 创建Uploadify上传组件的一个实例。 .uploadifyCancel() 从上传队列移除一个文件。如果文件正在上传,该方法将先取消上传,然后再将文件移除出上传队列。 .uploadifyClearQueue() 将所有文件移除出上传队列,并且取消正在执行的所有上传。 .uploadifySettings() 改变Uploadify组件的可选参数。 .uploadifyUpload() 触发上传。
这里会用到一些参数,但是我们并不需要完全的掌握这些参数,用之前看看有哪些参数,倒是自己会用哪些参数就ok。
由于时间有限,我把核心的代码先发出来,供大家参考:
在
标签中先应用css样式 路径这里你的可能和我的不一样接着再在
标签中应用js,js代码注意先后顺序,不然会报错。同样这里路径是改成你自己的路径。uploaddiy是用jquery开发的,那我们就要先应用jquery才可以再使用uploaddiy所以要注意应用js的时候注意先后顺序
接着是核心的html代码
图 片: <%--上传时的进度条--%><%--成功上传生成图片预览功能--%>
写的时候写在form的table表中
接着我们开始完成控件给我们需要完成的接口代码如下:
//uploadify插件的自定义设置 $(document).ready(function () { $("#uploadify").uploadify({ 'uploader': '../Plugin/uploadify.swf', 'script': 'UploadImg.ashx', 'cancelImg': '../Plugin/cancel.png', 'folder': '../upload', 'buttonText': 'SELECT Pic', 'fileExt': '*.jpg;*.gif,*.png', //允许上传的文件格式为*.jpg,*.gif,*.png 'fileDesc': 'Web Image Files(.JPG,.GIF,.PNG)', //过滤掉除了*.jpg,*.gif,*.png的文件 'queueID': 'fileQueue', 'sizeLimit': '2048000', //最大允许的文件大小为2M 'auto': false, //需要手动的提交申请 'multi': false, //一次只允许上传一张图片 'onCancel': funCancel, //当用户取消上传时 'onComplete': funComplete, //完成上传任务 'OnError': funError //上传发生错误时 }); }); //用户取消函数 function funCancel(event, ID, fileObj, data) { jBox.tip('您取消了' + fileObj.name + '操作', 'info'); return; } //图片上传发生的事件 function funComplete(event, ID, fileObj, response, data) { //$("#pic").html(''); if (response == 0) { jBox.tip('图片' + fileObj.name + '操作失败', 'info'); return; } $("#pic").attr("src", "../upload/" + response).height(200).width(300); jBox.tip('图片' + fileObj.name + '操作成功', 'info'); return; } //上传发生错误时。 function funError(event, ID, fileObj, errorObj) { jBox.tip(errorObj.info); return; }
接着我们来完成一般处理时间的文件,代码如下:
context.Response.ContentType = "text/plain"; context.Response.Charset = "utf-8"; HttpPostedFile file = context.Request.Files["Filedata"]; string uploadPath = HttpContext.Current.Server.MapPath(@context.Request["folder"]) + ""; if (file != null) { //if (File.Exists(uploadPath + file.FileName)) //{ // context.Response.Write("3"); //文件已经存在 // return; //} string[] fn = file.FileName.Split('.'); string ext = fn[fn.Length - 1]; string filename = DateTime.Now.ToString("yyyyMMddhhmmss")+"."+ext; if (!Directory.Exists(uploadPath)) { Directory.CreateDirectory(uploadPath); } file.SaveAs(uploadPath + filename); //下面这句代码缺少的话,上传成功后上传队列的显示不会自动消失 context.Session[context.Session["userName"].ToString()] = filename; context.Response.Write(filename); } else { context.Response.Write("0"); }
成功上传返回文件的名字,失败的话返回一个0,js不追返回值,如果是0表示失败,如果不是0则动态的给img加载src。
源码下载:http://xiazai.jb51.net/201606/yuanma/jQuery-uploadify-ajax-upload(jb51.net).rar