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.")); } }