/// <summary> /// Загружает на сервер документ об образовании и /// создаёт соответствующую запись в таблице UserDocuments /// </summary> /// <param name="userName"></param> /// <param name="uploadedFile"></param> /// <param name="typeOfEducationDocument">Тип документа об образовании</param> /// <returns></returns> public async Task <UserDocument> CreateEducationDocumentAsync(string userName, IFormFile uploadedFile, FileDataTypeEnum typeOfEducationDocument) { var userId = _userProfileRepository.GetAppUserId(userName); var fileModel = await _fileModelRepository.UploadEducationDocumentAsync(uploadedFile, typeOfEducationDocument); if (fileModel == null) { return(null); } var userDocument = new UserDocument { AppUserId = userId, FileModelId = fileModel.Id, FileDataTypeId = (int)typeOfEducationDocument }; await _context.AddAsync(userDocument); await _context.SaveChangesAsync(); return(userDocument); }
public async Task <IActionResult> Create([Bind("UchPosobieId,UchPosobieVidId,GodIzdaniya,UchPosobieName,BiblOpisanie,UchPosobieFormaIzdaniyaId,FileModelId")] UchPosobie uchPosobie, IFormFile uploadedFile) { if (ModelState.IsValid && uploadedFile != null) { FileDataTypeEnum fileDataTypeEnum = FileDataTypeEnum.UchebnoePosobie; string uchPosobieVidName = (await _context.UchPosobieVid.SingleOrDefaultAsync(v => v.UchPosobieVidId == uchPosobie.UchPosobieVidId)).UchPosobieVidName; var fileDataType = await _context.FileDataTypes.SingleOrDefaultAsync(fdt => fdt.FileDataTypeName == uchPosobieVidName); if (fileDataType != null) { fileDataTypeEnum = (FileDataTypeEnum)fileDataType.FileDataTypeId; } FileModel fileModel = await KisVuzDotNetCore2.Models.Files.Files.LoadFile(_context, _appEnvironment, uploadedFile, uchPosobie.UchPosobieName, fileDataTypeEnum); uchPosobie.FileModelId = fileModel.Id; _context.Add(uchPosobie); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } ViewData["FileModelId"] = new SelectList(_context.Files, "Id", "Id", uchPosobie.FileModelId); ViewData["UchPosobieFormaIzdaniyaId"] = new SelectList(_context.UchPosobieFormaIzdaniya, "UchPosobieFormaIzdaniyaId", "UchPosobieFormaIzdaniyaId", uchPosobie.UchPosobieFormaIzdaniyaId); ViewData["UchPosobieVidId"] = new SelectList(_context.UchPosobieVid, "UchPosobieVidId", "UchPosobieVidId", uchPosobie.UchPosobieVidId); return(View(uchPosobie)); }
/// <summary> /// Проверяет наличие у пользователя документов указанного типа /// </summary> /// <param name="appUser"></param> /// <param name="fileDataType"></param> /// <returns></returns> public bool IsLoadedUserDocument(AppUser appUser, FileDataTypeEnum fileDataType) { bool isLoadedFile = appUser.UserDocuments.Any(u => u.FileDataTypeId == (int)fileDataType); return(isLoadedFile); }
public async Task <IActionResult> Edit(int id, [Bind("UchPosobieId,UchPosobieVidId,GodIzdaniya,UchPosobieName,BiblOpisanie,UchPosobieFormaIzdaniyaId,FileModelId")] UchPosobie uchPosobie, IFormFile uploadedFile) { if (id != uchPosobie.UchPosobieId) { return(NotFound()); } if (ModelState.IsValid) { FileDataTypeEnum fileDataTypeEnum = FileDataTypeEnum.UchebnoePosobie; string uchPosobieVidName = (await _context.UchPosobieVid.SingleOrDefaultAsync(v => v.UchPosobieVidId == uchPosobie.UchPosobieVidId)).UchPosobieVidName; var fileDataType = await _context.FileDataTypes.SingleOrDefaultAsync(fdt => fdt.FileDataTypeName == uchPosobieVidName); if (fileDataType != null) { fileDataTypeEnum = (FileDataTypeEnum)fileDataType.FileDataTypeId; } if (uploadedFile != null) { FileModel fileModel = await KisVuzDotNetCore2.Models.Files.Files.LoadFile(_context, _appEnvironment, uploadedFile, uchPosobie.UchPosobieName, fileDataTypeEnum); await _context.SaveChangesAsync(); int?fileToRemoveId = uchPosobie.FileModelId; uchPosobie.FileModelId = fileModel.Id; await _context.SaveChangesAsync(); KisVuzDotNetCore2.Models.Files.Files.RemoveFile(_context, _appEnvironment, fileToRemoveId); } try { _context.Update(uchPosobie); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!UchPosobieExists(uchPosobie.UchPosobieId)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } ViewData["FileModelId"] = new SelectList(_context.Files, "Id", "Id", uchPosobie.FileModelId); ViewData["UchPosobieFormaIzdaniyaId"] = new SelectList(_context.UchPosobieFormaIzdaniya, "UchPosobieFormaIzdaniyaId", "UchPosobieFormaIzdaniyaId", uchPosobie.UchPosobieFormaIzdaniyaId); ViewData["UchPosobieVidId"] = new SelectList(_context.UchPosobieVid, "UchPosobieVidId", "UchPosobieVidId", uchPosobie.UchPosobieVidId); return(View(uchPosobie)); }
/// <summary> /// Проверяет наличие у пользователя наличия документов указанного типа /// </summary> /// <param name="userName"></param> /// <param name="fileDataType"></param> /// <returns></returns> public bool IsLoadedUserDocument(string userName, FileDataTypeEnum fileDataType) { var appUser = GetAppUser(userName); if (appUser == null) { throw new Exception($"Пользователь {userName} не найден!"); } bool isLoadedFile = IsLoadedUserDocument(appUser, fileDataType); return(isLoadedFile); }
/// <summary> /// Создаёт объект FileModel и загружает его в папку www/files /// </summary> /// <param name="_context"></param> /// <param name="_appEnvironment"></param> /// <param name="uploadedFile"></param> /// <param name="name"></param> /// <returns></returns> public static async Task <FileModel> LoadFile(AppIdentityDBContext _context, IHostingEnvironment _appEnvironment, IFormFile uploadedFile, string name, FileDataTypeEnum fileDataTypeEnum) { FileModel fileModel = new FileModel(); fileModel.ContentType = uploadedFile.ContentType; fileModel.Name = name; string fileName = /*DateTime.Now.ToString("yyyy-MM-dd-") +*/ Guid.NewGuid().ToString() + Path.GetExtension(uploadedFile.FileName); // путь к папке files string[] paths = { _appEnvironment.WebRootPath, "files", fileName }; string path = Path.Combine(paths); // сохраняем файл в папку files в каталоге wwwroot using (var fileStream = new FileStream(path, FileMode.Create)) { await uploadedFile.CopyToAsync(fileStream); } fileModel.FileName = Path.GetFileName(uploadedFile.FileName); fileModel.Path = Path.Combine("files", fileName);; if (Path.GetExtension(uploadedFile.FileName) == ".pdf") { fileModel.ContentType = "application/pdf"; } _context.Files.Add(fileModel); await _context.SaveChangesAsync(); FileToFileType ftf = new FileToFileType { FileDataTypeId = (int)fileDataTypeEnum, FileModelId = fileModel.Id }; _context.FileToFileTypes.Add(ftf); await _context.SaveChangesAsync(); return(fileModel); }
/// <summary> /// Обновляет учебное пособие /// </summary> /// <param name="uchPosobieEditViewModel"></param> /// <returns></returns> public async Task UpdateUchPosobie(UchPosobieEditViewModel uchPosobieEditViewModel) { if (uchPosobieEditViewModel == null) { return; } if (uchPosobieEditViewModel.FormFile != null) { FileDataTypeEnum fileDataTypeEnum = await GetFileDataTypeEnumByUchPosobieVidId(uchPosobieEditViewModel.UchPosobie.UchPosobieVidId); var fileModel = await _fileModelRepository.UploadUchPosobieAsync(uchPosobieEditViewModel.FormFile, fileDataTypeEnum); if (fileModel != null) //Если новый файл успешно загружен { if (uchPosobieEditViewModel.UchPosobie.FileModelId != 0) // и при этом ранее уже был загружен другой файл { await _fileModelRepository.RemoveFileAsync(uchPosobieEditViewModel.UchPosobie.FileModelId); // Удаляем старый файл } } uchPosobieEditViewModel.UchPosobie.FileModelId = fileModel.Id; } _context.UchPosobie.Update(uchPosobieEditViewModel.UchPosobie); try { // Attempt to save changes to the database await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException ex) { foreach (var entry in ex.Entries) { if (entry.Entity is UchPosobie) { var proposedValues = entry.CurrentValues; var databaseValues = entry.GetDatabaseValues(); foreach (var property in proposedValues.Properties) { var proposedValue = proposedValues[property]; var databaseValue = databaseValues[property]; // TODO: decide which value should be written to database proposedValues[property] = proposedValue; } // Refresh original values to bypass next concurrency check entry.OriginalValues.SetValues(databaseValues); await _context.SaveChangesAsync(); } else { throw new NotSupportedException( "Don't know how to handle concurrency conflicts for " + entry.Metadata.Name); } } } }
/// <summary> /// Возвращает тип файлов /// </summary> /// <param name="fileDataType"></param> /// <returns></returns> private FileDataType GetFileDataType(FileDataTypeEnum fileDataType) { var fileDataTypeEntry = _context.FileDataTypes.FirstOrDefault(f => f.FileDataTypeId == (int)fileDataType); return(fileDataTypeEntry); }
/// <summary> /// Загружает файл документа об образовании /// </summary> /// <param name="uploadedFile"></param> /// <param name="typeOfEducationDocument"></param> /// <returns></returns> public async Task <FileModel> UploadEducationDocumentAsync(IFormFile uploadedFile, FileDataTypeEnum typeOfEducationDocument) { FileDataType eduDocType = GetFileDataType(typeOfEducationDocument); var fileModel = await UploadFileAsync(uploadedFile, eduDocType.FileDataTypeName, typeOfEducationDocument); return(fileModel); }
/// <summary> /// Загружает учебное пособие /// </summary> /// <param name="uploadedFile"></param> /// <returns></returns> public async Task <FileModel> UploadUchPosobieAsync(IFormFile uploadedFile, FileDataTypeEnum fileDataTypeEnum = FileDataTypeEnum.UchebnoePosobie) { return(await UploadFileAsync(uploadedFile, "Учебное пособие", fileDataTypeEnum)); }
/// <summary> /// Создаёт объект FileModel и загружает его в папку www/files /// </summary> /// <param name="_context"></param> /// <param name="_appEnvironment"></param> /// <param name="uploadedFile"></param> /// <param name="name"></param> /// <returns></returns> public async Task <FileModel> UploadFileAsync(IFormFile uploadedFile, string name, FileDataTypeEnum fileDataTypeEnum) { FileModel fileModel = new FileModel(); fileModel.ContentType = uploadedFile.ContentType; fileModel.UploadDate = DateTime.Now; fileModel.Name = name; string fileName = await UploadFileToDisk(uploadedFile); fileModel.FileName = Path.GetFileName(uploadedFile.FileName); fileModel.Path = Path.Combine("files", fileName);; if (Path.GetExtension(uploadedFile.FileName) == ".pdf") { fileModel.ContentType = "application/pdf"; } _context.Files.Add(fileModel); await _context.SaveChangesAsync(); FileToFileType ftf = new FileToFileType { FileDataTypeId = (int)fileDataTypeEnum, FileModelId = fileModel.Id }; _context.FileToFileTypes.Add(ftf); await _context.SaveChangesAsync(); return(fileModel); }
/// <summary> /// Загружает на сервер файл указанного типа /// </summary> /// <param name="uploadedFile"></param> /// <param name="fileDataType"></param> /// <returns></returns> public async Task <FileModel> UploadFileAsync(IFormFile uploadedFile, FileDataTypeEnum fileDataType) { var fileModel = await UploadFileAsync(uploadedFile, fileDataType.ToString(), fileDataType); return(fileModel); }
/// <summary> /// Возвращает документы пользователя указанного типа /// </summary> /// <param name="educationDocuments"></param> /// <returns></returns> private IQueryable <UserDocument> GetUserDocuments(FileDataTypeEnum fileDataType) { var userDocuments = UserDocuments.Where(ud => ud.FileDataTypeId == (int)fileDataType); return(userDocuments); }