上文件传很常见,现在就文件上传利用HTML的File控件(uploadify)的,这里为大家介绍一下(uploadify)的一些使用方法。在目前Web开发中用的比较多的,可能uploadify(参考http://www.uploadify.com/)也算一个吧,不过这个版本一直在变化,他们的脚本调用也有很大的不同,甚至调用及参数都一直在变化,很早的时候,那个Flash的按钮文字还没法变化,本篇随笔主要根据项目实际,介绍一下3.1版本的uploadify的控件使用,这版本目前还是最新的,因此对我们做Web开发来说,有一定的参考性。
这个控件有很多参数控制,以及事件的处理响应,相对来说也比较好用。参数控制可以控制上传文件多选、文件类型、文件大小、文件数量、检查文件是否存在,以及一些按钮参数的控制,如文字、高度、宽度等,对提交文件成功与否、完成操作、取消、停止上传等等都有控制,他们的帮助文档也写得比较完善,不过就是各个版本的方法参数完全不同了,但控件是一个好控件。
控件的使用首先要加入必备的脚本类库,由于该控件是利用了Jquery的功能,因此还需要应用Jquery脚本文件,如下所示。
1 2 3
配置控件的一些参数,以及相应的处理事件,如下所示。
1
再次提一下,这个控件不要参考网上其他的一些说明,否则可能参数及用法不正确,一定要找到对应版本的说明(本篇指的是3.1.1),最好参考该版本的在线文档。
上面的参数,我基本上都给了注释了,还有一些不是很重要的参数,这里没有列出来,需要可以参考在线文档吧。
值得提到的是,这个版本可以修改Flash里面的文字,非常棒,很讨厌以前的那个默认Browse的英文,虽然以前替代图片可以修改文字,但是还是不太好用。这个直接修改文字,非常好。
值得注意的是uploader参数,这个是我们ashx的后台处理程序,就是控件提交文件给那个页面进行保存处理,添加数据库记录等操作。
页面代码使用很简单,如下所示
1 214
关键是后台上传文件的保存操作了,asp.net一般采用ashx的处理页面来处理。
1 ///2 /// 文件上传后台处理页面 3 /// 4 [WebService(Namespace = "http://tempuri.org/")] 5 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 6 public class UploadHandler : IHttpHandler 7 { 8 public void ProcessRequest(HttpContext context) 9 { 10 context.Response.ContentType = "text/plain"; 11 context.Response.Charset = "utf-8"; 12 try 13 { 14 string guid = context.Request.QueryString["guid"]; 15 string folder = context.Request["folder"]; 16 //LogTextHelper.Info(folder); 17 HttpPostedFile file = context.Request.Files["Filedata"]; 18 if (file != null) 19 { 20 string oldFileName = file.FileName;//原文件名 21 int size = file.ContentLength;//附件大小 22 23 string extenstion = oldFileName.Substring(oldFileName.LastIndexOf(".") + 1);//后缀名 24 string newFileName = GetNewFileName(oldFileName);//生成新文件名 25 //LogTextHelper.Info(newFileName); 26 #region 上传到远程服务器 27 //FileServerManage fsw = new FileServerManage(); 28 //string uploadFilePath = "/" + newFileName; 29 //if (!string.IsNullOrEmpty(folder)) 30 //{ 31 // uploadFilePath = string.Format("/{0}/{1}", folder, newFileName); 32 //} 33 //bool uploaded = fsw.UploadFile(file.InputStream, "/" + folder + "/" + newFileName); 34 #endregion 35 #region 本地服务器上传 36 AppConfig config = new AppConfig(); 37 string uploadFiles = config.AppConfigGet("uploadFiles"); 38 if (string.IsNullOrEmpty(uploadFiles)) 39 { 40 uploadFiles = "uploadFiles"; 41 } 42 if (!string.IsNullOrEmpty(folder)) 43 { 44 uploadFiles = Path.Combine(uploadFiles, folder); 45 } 46 string uploadPath = Path.Combine(HttpContext.Current.Server.MapPath("/"), uploadFiles); 47 if (!Directory.Exists(uploadPath)) 48 { 49 Directory.CreateDirectory(uploadPath); 50 } 51 string newFilePath = Path.Combine(uploadPath, newFileName); 52 LogTextHelper.Info(newFilePath); 53 file.SaveAs(newFilePath); 54 bool uploaded = File.Exists(newFilePath); 55 #endregion 56 if (uploaded) 57 { 58 #region 文件保存成功后,写入附件的数据库记录 59 //AttachmentInfo attachmentInfo = new AttachmentInfo(); 60 //attachmentInfo.EditorTime = DateTime.Now; 61 //attachmentInfo.FileExtend = extenstion; 62 //attachmentInfo.FileName = folader + "/" + newFileName; 63 //attachmentInfo.OldFileName = oldFileName; 64 //attachmentInfo.Size = size; 65 //attachmentInfo.Guid = guid; 66 //BLLFactory.Instance.Insert(attachmentInfo); 67 #endregion 68 } 69 } 70 else 71 { 72 LogTextHelper.Error("上传文件失败"); 73 } 74 } 75 catch (Exception ex) 76 { 77 LogTextHelper.Error("上传文件失败", ex); 78 throw; 79 } 80 } 81 /// 82 /// 获取新的名称 比如:aa.jpg转化为aa(20090504).jpg 83 /// 84 /// 文件名称[aa.jpg] 85 ///新的文件名称 86 public static string GetNewFileName(string fileName) 87 { 88 if (string.IsNullOrEmpty(fileName)) 89 return string.Empty; 90 //文件后缀名 91 string extenstion = fileName.Substring(fileName.LastIndexOf(".") + 1); 92 string name = fileName.Substring(0, fileName.LastIndexOf(".")) + "(" + DateTime.Now.ToFileTime() + ")"; 93 string newFileName = name + "." + extenstion; 94 return newFileName; 95 } 96 public bool IsReusable 97 { 98 get 99 {100 return false;101 }102 }103 }
上传后打开文件夹看到的图片效果图
如果你想要比较完整代码示例,请移步 ;