Esempio n. 1
0
        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
            });
        }
Esempio n. 2
0
        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());
        }