public async Task <ActionResult> GetUngradedSubmissions(int courseId) { GetUngradedSubmissionFilesDto dto = new GetUngradedSubmissionFilesDto { CourseId = courseId }; ServiceResponse <IEnumerable <string> > response = await _submissionService.DownloadNotGradedSubmissions(dto); if (!response.Success) { return(BadRequest(response)); } List <string> files = response.Data.ToList(); var webRoot = _hostingEnvironment.ContentRootPath; var fileName = "Submissions.zip"; var tempOutput = webRoot + "/StaticFiles/Submissions/" + fileName; using (ZipOutputStream zipOutputStream = new ZipOutputStream(System.IO.File.Create(tempOutput))) { zipOutputStream.SetLevel(9); byte[] buffer = new byte[4096]; for (int i = 0; i < files.Count; i++) { ZipEntry zipEntry = new ZipEntry(Path.GetFileName(files[i])); zipEntry.DateTime = DateTime.Now; zipEntry.IsUnicodeText = true; zipOutputStream.PutNextEntry(zipEntry); using (FileStream fileStream = System.IO.File.OpenRead(files[i])) { int sourceBytes; do { sourceBytes = fileStream.Read(buffer, 0, buffer.Length); zipOutputStream.Write(buffer, 0, sourceBytes); } while (sourceBytes > 0); } } zipOutputStream.Finish(); zipOutputStream.Flush(); zipOutputStream.Close(); byte[] finalResult = System.IO.File.ReadAllBytes(tempOutput); if (System.IO.File.Exists(tempOutput)) { System.IO.File.Delete(tempOutput); } if (finalResult == null || !finalResult.Any()) { return(BadRequest(response)); } return(File(finalResult, "application/zip", fileName)); } }
public async Task <ServiceResponse <IEnumerable <string> > > DownloadNotGradedSubmissions(GetUngradedSubmissionFilesDto dto) { ServiceResponse <IEnumerable <string> > response = new ServiceResponse <IEnumerable <string> >(); User user = await _context.Users.Include(u => u.ProjectGroups).FirstOrDefaultAsync(u => u.Id == GetUserId()); Course course = await _context.Courses.Include(u => u.Instructors).FirstOrDefaultAsync(c => c.Id == dto.CourseId); if (course == null) { response.Data = null; response.Message = "There is no course under this Id"; response.Success = false; return(response); } if (course.Instructors.FirstOrDefault(i => i.UserId == user.Id) == null && user.UserType == UserTypeClass.Student) { response.Data = null; response.Message = "You are not authorized for this endpoint"; response.Success = false; return(response); } response.Data = _context.Submissions.Include(s => s.AffiliatedAssignment) .Where(s => !s.IsGraded && s.AffiliatedAssignment.IsItGraded).Select(s => s.FilePath); return(response); }