Ejemplo n.º 1
0
        /// <summary>
        /// 保存单个文件到磁盘
        /// </summary>
        /// <param name="fileContent">文件内容</param>
        /// <param name="fileNewName">文件新名称</param>
        /// <returns>是否保存成功</returns>
        internal static Boolean InternalAdminSaveUploadFile(Byte[] fileContent, String fileNewName)
        {
            if (!AdminManager.HasPermission(PermissionType.Administrator))
            {
                throw new NoPermissionException();
            }

            if (String.IsNullOrEmpty(fileNewName))
            {
                throw new InvalidInputException("Filename can not be NULL!");
            }

            FileInfo fi = new FileInfo(fileNewName);

            if (!UploadsManager.CheckFileExtension(fi.Extension, ALLOW_EXTENSTIONS))
            {
                throw new InvalidInputException("Filename is INVALID!");
            }

            String savePath = Path.Combine(ConfigurationManager.UploadDirectoryPath, fileNewName);

            if (File.Exists(savePath))
            {
                throw new InvalidInputException("Filename exists!");
            }

            File.WriteAllBytes(savePath, fileContent);

            return(true);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 保存单个文件到磁盘
        /// </summary>
        /// <param name="file">上传的文件</param>
        /// <returns>是否保存成功</returns>
        public static IMethodResult AdminSaveUploadFile(HttpPostedFileBase file)
        {
            if (!AdminManager.HasPermission(PermissionType.Administrator))
            {
                throw new NoPermissionException();
            }

            if (file == null)
            {
                return(MethodResult.FailedAndLog("No file was uploaded!"));
            }

            if (String.IsNullOrEmpty(file.FileName))
            {
                return(MethodResult.FailedAndLog("Filename can not be NULL!"));
            }

            FileInfo fi = new FileInfo(file.FileName);

            if (!UploadsManager.CheckFileExtension(fi.Extension, ALLOW_EXTENSTIONS))
            {
                return(MethodResult.FailedAndLog("Filename is INVALID!"));
            }

            if (file.ContentLength <= 0)
            {
                return(MethodResult.FailedAndLog("You can not upload empty file!"));
            }

            String fileNewName = MD5Encrypt.EncryptToHexString(fi.Name + DateTime.Now.ToString("yyyyMMddHHmmssffff"), true) + fi.Extension;
            String savePath    = Path.Combine(ConfigurationManager.UploadDirectoryPath, fileNewName);

            if (File.Exists(savePath))
            {
                return(MethodResult.FailedAndLog("Filename exists!"));
            }

            file.SaveAs(savePath);

            return(MethodResult.SuccessAndLog <String>(fileNewName, "Admin upload file, name = {0}, origin = {1}", fileNewName, fi.Name));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 导入题目(不存在时返回null)
        /// </summary>
        /// <param name="request">Http请求</param>
        /// <param name="fileType">文件类型</param>
        /// <param name="uploadType">上传方式</param>
        /// <param name="content">文件内容</param>
        /// <param name="file">上传文件</param>
        /// <returns>题目数据是否插入成功集合(全部失败时为null)</returns>
        public static IMethodResult AdminImportProblem(HttpRequestBase request, String fileType, String uploadType, String content, HttpPostedFileBase file)
        {
            if (!AdminManager.HasPermission(PermissionType.SuperAdministrator))
            {
                throw new NoPermissionException();
            }

            if (!String.Equals("1", fileType))
            {
                return(MethodResult.FailedAndLog("File type is INVALID!"));
            }

            if (String.Equals("1", uploadType))//从文件上传
            {
                if (file == null)
                {
                    return(MethodResult.FailedAndLog("No file was uploaded!"));
                }

                StreamReader sr = new StreamReader(file.InputStream);

                content = sr.ReadToEnd();
            }

            //转换题库模型
            List <ProblemEntity> problems = null;
            List <Byte[]>        datas    = null;
            List <Dictionary <String, Byte[]> > images     = null;
            Dictionary <String, Byte[]>         imagefiles = new Dictionary <String, Byte[]>();

            if (!ProblemImport.TryImportFreeProblemSet(content, out problems, out datas, out images))
            {
                return(MethodResult.FailedAndLog("File content is INVALID!"));
            }

            if (problems == null || problems.Count == 0)
            {
                return(MethodResult.FailedAndLog("No problem was imported!"));
            }

            //处理题目及图片路径
            for (Int32 i = 0; i < problems.Count; i++)
            {
                problems[i].IsHide   = true;
                problems[i].LastDate = DateTime.Now;

                if (images[i] == null)
                {
                    continue;
                }

                String uploadRoot = ConfigurationManager.UploadDirectoryUrl;

                foreach (KeyValuePair <String, Byte[]> pair in images[i])
                {
                    if (pair.Value == null || !pair.Key.Contains("."))
                    {
                        continue;
                    }

                    String oldUrl      = pair.Key;
                    String fileNewName = MD5Encrypt.EncryptToHexString(oldUrl + DateTime.Now.ToString("yyyyMMddHHmmssffff"), true) + pair.Key.Substring(pair.Key.LastIndexOf('.'));
                    String newUrl      = uploadRoot + fileNewName;

                    problems[i].Description = problems[i].Description.Replace(oldUrl, newUrl);
                    problems[i].Input       = problems[i].Input.Replace(oldUrl, newUrl);
                    problems[i].Output      = problems[i].Output.Replace(oldUrl, newUrl);
                    problems[i].Hint        = problems[i].Hint.Replace(oldUrl, newUrl);

                    imagefiles[fileNewName] = pair.Value;
                }
            }

            //将题目插入到数据库
            List <Int32> pids = ProblemRepository.Instance.InsertEntities(problems);

            if (pids == null || pids.Count == 0)
            {
                return(MethodResult.FailedAndLog("Failed to import problem!"));
            }

            //保存题目数据
            Dictionary <Int32, Boolean> dataadded = new Dictionary <Int32, Boolean>();

            for (Int32 i = 0; i < pids.Count; i++)
            {
                if (pids[i] < 0)
                {
                    continue;
                }

                try
                {
                    if (datas[i] != null)
                    {
                        IMethodResult ret = ProblemDataManager.InternalAdminSaveProblemData(pids[i], datas[i]);

                        if (!ret.IsSuccess)
                        {
                            return(ret);
                        }

                        dataadded[pids[i]] = true;
                    }
                }
                catch
                {
                    dataadded[pids[i]] = false;
                }

                ProblemCache.IncreaseProblemSetCountCache();                      //更新缓存
                ProblemCache.IncreaseProblemIDMaxCache();                         //更新缓存
                ProblemCache.RemoveProblemSetCache(GetProblemPageIndex(pids[i])); //删除缓存
            }

            //保存题目图片
            foreach (KeyValuePair <String, Byte[]> pair in imagefiles)
            {
                try
                {
                    UploadsManager.InternalAdminSaveUploadFile(pair.Value, pair.Key);
                }
                catch { }
            }

            return(MethodResult.SuccessAndLog <Dictionary <Int32, Boolean> >(dataadded, "Admin import problem, id = {0}", String.Join(",", pids)));
        }