Exemplo n.º 1
0
        /// <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);
            }
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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);
            }
        }