Ejemplo n.º 1
0
        public IActionResult AddHomework(string lectureId, string courseId, string studentId, string homeworkFileName)
        {
            //Get the related lecture file (Homework)
            var lectureFile = _lectureService.GetLectureFile(lectureId, homeworkFileName);

            //Check if the request is valid
            if (lectureFile == null)
            {
                return(NotFound());
            }


            //Get the delivery file
            var homeworkDelivery     = Request.Form.Files[0];
            var homeworkDeliveryName = homeworkDelivery.Name;


            //Delivery not exist, so make a new one
            var oldHomeworkInDatabase =
                _lectureService.HomeworkDeliveredFile(lectureId, homeworkFileName, studentId);

            //Check if the file empty
            if (homeworkDelivery.Length == 0)
            {
                return(BadRequest("fileEmpty"));
            }

            //Should not contains "!!!" because it used by my system for naming
            if (homeworkDeliveryName.Contains("@"))
            {
                homeworkDeliveryName = homeworkDeliveryName.Replace("@", "");
            }

            if (homeworkDelivery.Length > 25 * 1024 * 1024)
            {
                return(BadRequest("largeFileMax25"));
            }

            var acceptedFiles = new List <string>()
            {
                "application/vnd.oasis.opendocument.text", "application/octet-stream",
                "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
                "application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
                "application/vnd.openxmlformats-officedocument.presentationml.presentation",
                "application/vnd.ms-powerpoint",
                "application/pdf", "application/vnd.geogebra.file", "image/png", "image/jpeg"
            };

            if (!acceptedFiles.Contains(homeworkDelivery.ContentType))
            {
                Console.WriteLine($"File Type not supported is: {homeworkDelivery.ContentType} ------------------");
                return(BadRequest("fileTypeNotSupported"));
            }

            var course  = _courseService.GetCourse(courseId);
            var lecture = _lectureService.GetLecture(lectureId);
            var student = _userManager.GetUserAsync(User).Result;

            if (course == null || lecture == null || student == null)
            {
                return(NotFound("errorHappened"));
            }

            var          envRoot                  = _environment.ContentRootPath;
            const string root                     = "wwwroot";
            const string fileFolder               = "Files";
            const string homeworksDelivery        = "HomeworksDelivery";
            var          courseTarget             = course.Subject + "-" + course.StartDate.Year + "-" + course.Id;
            var          homeworkDeliveryFileName = "LecNr-" + lecture.Number + "-" + student.FirstName + "-" + student.LastName + "@" + homeworkDeliveryName;


            var fileSaveTargetPath = Path.Combine(envRoot, root, fileFolder, homeworksDelivery, courseTarget, homeworkDeliveryFileName);
            var fileGetPath        = "~/" + fileFolder + "/" + homeworksDelivery + "/" + courseTarget + "/" + homeworkDeliveryFileName;

            if (Directory.GetDirectories(envRoot + "/" + root, fileFolder).Length == 0)
            {
                Directory.CreateDirectory(Path.Combine(envRoot + "/" + root + "/" + fileFolder));
            }

            if (Directory.GetDirectories(envRoot + "/" + root + "/" + fileFolder, homeworksDelivery).Length == 0)
            {
                Directory.CreateDirectory(Path.Combine(envRoot + "/" + root + "/" + fileFolder + "/" + homeworksDelivery));
            }

            if (Directory.GetDirectories(envRoot + "/" + root + "/" + fileFolder + "/" + homeworksDelivery, courseTarget).Length == 0)
            {
                Directory.CreateDirectory(Path.Combine(envRoot + "/" + root + "/" + fileFolder + "/" + homeworksDelivery + "/" + courseTarget));
            }

//            if (Directory.GetFiles(envRoot+"/" + root + "/" + fileFolder + "/" + homeworksDelivery + "/" + courseTarget, homeworkDeliveryFileName).Length !=
//                0)
//                return BadRequest("Files in same name delivered");



            try
            {
                using (var stream = new FileStream(fileSaveTargetPath, FileMode.Create))
                {
                    homeworkDelivery.CopyToAsync(stream).Wait();
                }



                var newHomeworkDeliveryFile = new Homework()
                {
                    LectureFile = lectureFile, Name = homeworkDelivery.FileName, Path = fileGetPath, RootPath = fileSaveTargetPath, Student = student
                };

                if (oldHomeworkInDatabase != null)
                {
                    System.IO.File.Delete(oldHomeworkInDatabase.RootPath);
                    _context.Remove(oldHomeworkInDatabase);
                    _context.SaveChanges();
                }


                _context.Add(newHomeworkDeliveryFile);
                _context.SaveChanges();
                return(Ok("File Added Successfully"));
            }

            catch (Exception e)
            {
                Console.WriteLine(e);
                return(BadRequest("Error! Please refresh and try again."));
            }
        }