public ActionResult SaveFiles(HttpPostedFileBase[] file)
        {
            if (file == null || file[0] == null)
            {
                return(RedirectToAction("ErrorPage", "ErrorController"));
            }

            const int    NUMBER_OF_ATTEMPTS_TO_GENERATE = 10;
            const string ROOT_PATH = @"~\AllUsersFiles\";
            string       fileGuid  = null;

            #region генерация guid для папки файла
            //если за 10 попыток не генерируется уникальный guid, то возвращается страница с ошибкой
            for (int i = 0; i < NUMBER_OF_ATTEMPTS_TO_GENERATE; i++)
            {
                fileGuid = CreateFolderGuid();

                if (fileGuid != null)
                {
                    break;
                }
            }

            if (fileGuid == null)
            {
                return(RedirectToAction("ErrorPage", "ErrorController"));
            }
            #endregion

            string fullPathForAllFiles   = ROOT_PATH + fileGuid;
            int    userFilesIndexCounter = 0;
            string fullPathForEachFiles;
            Directory.CreateDirectory(Server.MapPath(fullPathForAllFiles));

            List <AllFiles> allFiles = new List <AllFiles>(file.Length);

            AllFilesAndGroupFilesLink filesLink = new AllFilesAndGroupFilesLink();

            GroupFileOfOneUpload groupFilesOfOneUpload = new GroupFileOfOneUpload
            {
                UserName       = Request.IsAuthenticated ? User.Identity.GetUserName() : "Anonymous",
                FileUploadDate = DateTime.Now,
                GroupFileGuid  = fileGuid
            };

            //Добавляем в таблицу групповую инфу о файлах
            RepositoryGroupFiles.AddGroup(groupFilesOfOneUpload);

            //Добавляем дефолтную инфу о файле
            new FileConfigsController(groupFilesOfOneUpload, RepositoryFileConfigs);

            //получаем из файлов инфу и добавляем ее в таблицу по каждому файлу
            foreach (var item in file)
            {
                allFiles.Add(new AllFiles
                {
                    FileName      = item.FileName,
                    FileExtension = Path.GetExtension(item.FileName),
                    //FileGuid = fileGuid,
                    FileSize = item.ContentLength,
                    //FileUploadTime = DateTime.Now,
                    //UserLogin = Request.IsAuthenticated ? User.Identity.GetUserName() : "Anonymous"
                });

                RepositoryAllFiles.AddFile(allFiles[userFilesIndexCounter]);

                //Добавляем в линкующую таблицу, айдишники отдельных файлов и айдишник группы этих файлов
                filesLink.FileId      = allFiles[userFilesIndexCounter].FileId;
                filesLink.GroupFileId = groupFilesOfOneUpload.GroupFileId;
                RepositoryLinkFiles.AddLink(filesLink);

                fullPathForEachFiles = Server.MapPath(fullPathForAllFiles) + @"\" + allFiles[userFilesIndexCounter].FileId;

                Directory.CreateDirectory(fullPathForEachFiles);
                item.SaveAs(fullPathForEachFiles + @"\" + item.FileName);
                userFilesIndexCounter++;
            }

            return(RedirectToAction("ShowUploadedFile", new { id = fileGuid }));
        }
Exemple #2
0
 public void AddLink(AllFilesAndGroupFilesLink allFilesAndGroupFilesLink)
 {
     context.AllFilesAndGroupFilesLink.Add(allFilesAndGroupFilesLink);
     context.SaveChanges();
 }