示例#1
0
        public Task <Result <CabinetFileInfo> > Handle(CreateDocumentCommand request, CancellationToken cancellationToken)
        {
            return(Task.Run(async() =>
            {
                var dPath = Path.Combine(cs.DataDir, request.ContainerName);
                if (!Directory.Exists(dPath))
                {
                    var message = $"container name '{request.ContainerName}' does not exist";
                    return Result.Fail <CabinetFileInfo>(new Error(message));
                }

                var fPath = Path.Combine(dPath, request.DocumentName);

                var fileExist = File.Exists(fPath);

                // override is off but file already exist
                if (!request.OverRide && fileExist)
                {
                    return Result.Fail <CabinetFileInfo>(new Error($"file '{request.DocumentName}' already exist!"));
                }

                // override is on and file already exist
                if (request.OverRide && fileExist)
                {
                    try
                    {
                        File.Delete(fPath);
                    }
                    catch (Exception ex)
                    {
                        return Result.Fail <CabinetFileInfo>(new Error(ex.Message));
                    }
                }

                using var stream = new FileStream(fPath, FileMode.Create);
                await request.FromFile.CopyToAsync(stream);

                var cfInfo = new CabinetFileInfo
                {
                    Name = request.DocumentName,
                    Path = fPath,
                    Size = request.FromFile.Length,
                    ContainerName = request.ContainerName,
                    DocumentName = request.DocumentName,
                    MimeType = request.FromFile.ContentType,
                    CreatedAt = DateTime.UtcNow,
                };

                return Result.Ok(cfInfo);
            }));
        }
示例#2
0
        public async Task <IActionResult> CreateDocument(
            IFormFile file,
            [FromQuery] string containerName,
            [FromQuery] string documentName,
            [FromQuery] bool overRide)
        {
            var query  = new CreateDocumentCommand(file, containerName, documentName, overRide);
            var result = await _mediator.Send(query);

            if (!result.IsSuccess)
            {
                var reasons = result.Errors.ToArray().Select(r => r.Message);
                return(BadRequest(new { success = false, reasons }));
            }

            return(Ok(new { success = true, payload = result.Value }));
        }