public async Task <ServiceResponse <string> > DownloadAssignmentFile(GetAssignmentFileDto dto) { ServiceResponse <string> response = new ServiceResponse <string>(); User user = await _context.Users.Include(u => u.ProjectGroups).ThenInclude(pgu => pgu.ProjectGroup).FirstOrDefaultAsync(u => u.Id == GetUserId()); Assignment assignment = await _context.Assignments.FirstOrDefaultAsync(a => a.Id == dto.AssignmentId); if (assignment == null || assignment.FilePath == null) { response.Data = "No submission"; response.Message = "There is no submission under this id"; response.Success = false; return(response); } Course course = await _context.Courses.FirstOrDefaultAsync(c => c.Id == assignment.AfilliatedCourseId); ProjectGroup projectGroup = await _context.ProjectGroups.FirstOrDefaultAsync(pg => pg.AffiliatedCourseId == course.Id); if (course == null || projectGroup == null) { response.Data = "Not allowed"; response.Message = "You are not allowed to see file for this assignment"; response.Success = false; return(response); } response.Data = assignment.FilePath; return(response); }
public async Task <IActionResult> GetAssignmentFile(int assignmentId) { GetAssignmentFileDto dto = new GetAssignmentFileDto { AssignmentId = assignmentId }; ServiceResponse <string> response = await _assignmentService.DownloadAssignmentFile(dto); if (!response.Success) { return(BadRequest(response)); } string path = response.Data; string type = GetContentType(path); if (type == null) { return(BadRequest("this file type is not supported")); } var memory = new MemoryStream(); using (var stream = new FileStream(path, FileMode.Open)) { await stream.CopyToAsync(memory); } memory.Position = 0; return(File(memory, type, Path.GetFileName(path))); }