/// <summary> /// 检测上传配置文件是否有效 /// </summary> /// <param name="configModel">wfs_UploadConfig</param> /// <returns>有效:true, 无效:false</returns> private bool IsValidOfUploadConfig(wfs_UploadConfig configModel) { if (configModel != null) { if (string.IsNullOrEmpty(configModel.wfs_FileType)) { return(false); } if (string.IsNullOrEmpty(configModel.wfs_VirtualDirectory)) { return(false); } if (string.IsNullOrEmpty(configModel.wfs_AllowFileType)) { return(false); } if (configModel.wfs_FileNameIsDate == null) { return(false); } if (configModel.wfs_FileMaxSize == null) { return(false); } return(true); } else { return(false); } }
/// <summary> /// 加载配置文件 /// </summary> /// <returns>wfs_UploadConfig</returns> private wfs_UploadConfig LoadUploadConfig() { wfs_UploadConfig configModel = null; try { //将对象序列化到XML文档中,或者从XML文档中反序列化对象 XmlSerializer xs = new XmlSerializer(typeof(wfs_UploadConfig)); string userConfigPath = HttpContext.Current.Server.MapPath(UserConfigPath); FileStream fs = new FileStream(userConfigPath, FileMode.Open, FileAccess.Read); configModel = (wfs_UploadConfig)xs.Deserialize(fs); fs.Close(); } catch (Exception ex) { } return(configModel); }
/// <summary> /// 执行上传:From HttpPostFile /// </summary> /// <param name="PostFile"></param> /// <returns>UpLoadResult</returns> public UpLoadResult UploadFileFrom_HttpPostFile(HttpPostedFile PostFile) { try { HttpPostedFile HtpostfileModel = PostFile; if (HtpostfileModel != null && !string.IsNullOrEmpty(PostFile.FileName)) { //加载配置文件 wfs_UploadConfig configModel = LoadUploadConfig(); //检查配置文件是否有效 if (IsValidOfUploadConfig(configModel)) { //检测虚拟路径是否存在(暂时没有考虑创建目录权限问题) string VirtualDirectory = HttpContext.Current.Server.MapPath(configModel.wfs_VirtualDirectory); if (!Directory.Exists(VirtualDirectory)) { //不存在虚拟目录 >> 创建 Directory.CreateDirectory(VirtualDirectory); } //获取文件扩展名 string fileExt = Path.GetExtension(HttpUtility.UrlDecode(PostFile.FileName)).ToLower(); //是否允许上传的文件类型 bool flag_IsAllow_Ext = configModel.wfs_AllowFileType.Contains(fileExt.Trim('.')); //文件检测(防止修改文件后缀,上传非法文件) bool flag_FileIsValid = IsVliadOfPostFile(configModel.wfs_FileType, PostFile); if (flag_IsAllow_Ext && flag_FileIsValid) { //获取文件大小 double fileSize = PostFile.ContentLength; //将文件大小单位转为MB fileSize = Math.Round(fileSize / 1024.0 / 1024.0, 1); //是否满足文件最大限制 bool flag_IsLeftFileMaxSize_Ext = fileSize <= configModel.wfs_FileMaxSize; if (flag_IsLeftFileMaxSize_Ext) { //文件名前缀 string UserCustomFileName = (!string.IsNullOrEmpty(configModel.wfs_FilePrefix)) ? configModel.wfs_FilePrefix : string.Empty; //是否以当前日期+时间作为文件名 if (configModel.wfs_FileNameIsDate == 1) { UserCustomFileName = UserCustomFileName + DateTime.Now.ToString("yyyyMMddHHmmssffff"); } else { UserCustomFileName = UserCustomFileName + Path.GetRandomFileName(); } //原文件名 FileSrcName = PostFile.FileName; //新的文件名称 FileNewName = UserCustomFileName + fileExt; //文件物理名称 FileFullName = configModel.wfs_VirtualDirectory + FileNewName; //保存文件 PostFile.SaveAs(VirtualDirectory + FileNewName); //上传成功 return(UpLoadResult.SUCCESS); } else { return(UpLoadResult.FILE_SIZE_IS_TOOMAX); } } else { return(UpLoadResult.FILE_TYPE_IS_NOT_ALLOW); } } else { return(UpLoadResult.LOAD_USERCONFIG_FAIL); } } else { return(UpLoadResult.FILE_ISNULL); } } catch (Exception ex) { return(UpLoadResult.UPLOAD_EXCEPTION); } }