public virtual async Task <CreateManyFileOutput> CreateManyAsync(CreateManyFileInput input) { var configuration = _configurationProvider.Get(input.FileInfos.First().FileContainerName); CheckFileQuantity(input.FileInfos.Count, configuration); CheckFileSize(input.FileInfos.ToDictionary(x => x.FileName, x => x.Content?.LongLength ?? 0), configuration); CheckFileExtension( input.FileInfos.Where(x => x.FileType == FileType.RegularFile) .Select(x => Path.GetExtension(x.FileName)).Distinct().ToList(), configuration); var files = new File[input.FileInfos.Count]; for (var i = 0; i < input.FileInfos.Count; i++) { var fileInfo = input.FileInfos[i]; var parent = await TryGetEntityByNullableIdAsync(fileInfo.ParentId); var file = await _fileManager.CreateAsync(fileInfo.FileContainerName, fileInfo.OwnerUserId, fileInfo.FileName, fileInfo.MimeType, fileInfo.FileType, parent, fileInfo.Content); await AuthorizationService.CheckAsync(CreateFileOperationInfoModel(file), new OperationAuthorizationRequirement { Name = FileManagementPermissions.File.Create }); await _repository.InsertAsync(file); files[i] = file; } for (var i = 0; i < files.Length; i++) { await _fileManager.TrySaveBlobAsync(files[i], input.FileInfos[i].Content); } var items = new List <CreateFileOutput>(); foreach (var file in files) { items.Add(await MapToCreateOutputDtoAsync(file)); } return(new CreateManyFileOutput { Items = items }); }
public virtual async Task <IActionResult> OnPostAsync() { var dto = new CreateManyFileInput { FileInfos = new List <CreateFileInput>() }; foreach (var uploadedFile in UploadedFiles) { dto.FileInfos.Add(new CreateFileInput { FileContainerName = FileContainerName, OwnerUserId = OwnerUserId, FileName = uploadedFile.FileName, FileType = FileType.RegularFile, MimeType = uploadedFile.ContentType, ParentId = ParentId, Content = await uploadedFile.GetAllBytesAsync() }); } await _service.CreateManyAsync(dto); return(NoContent()); }