Пример #1
0
            /// <summary>
            /// Handle the DeleteAzureBlobCommand request.
            /// </summary>
            /// <param name="request">The DeleteAzureBlobCommand request.</param>
            /// <param name="cancellationToken">A cancellation token.</param>
            public async Task <Result> Handle(DeleteAzureBlobCommand request, CancellationToken cancellationToken)
            {
                var cloudBlobContainer = await _azureBlobHelper.GetCloudBlobContainerAsync(cancellationToken);

                if (!cloudBlobContainer.IsSuccess)
                {
                    return(Result.Fail(cloudBlobContainer.Exception));
                }

                try
                {
                    var blobName       = $"{request.TargetPath.Trim('/')}/{request.FileName.Trim('/')}";
                    var cloudBlockBlob = cloudBlobContainer.Value.GetBlockBlobReference(blobName);

                    var result = await cloudBlockBlob.DeleteIfExistsAsync();

                    if (!result)
                    {
                        return(Result.Fail(new FileDeleteException($"The blob ({request.FileName}) does not exist.")));
                    }

                    return(Result.Success());
                }
                catch (Exception ex)
                {
                    return(Result.Fail(new FileDeleteException($"The blob ({request.FileName}) could not be deleted.", ex)));
                }
            }
            /// <summary>
            /// Handle the GetPagedAzureBlobListQuery request.
            /// </summary>
            /// <param name="request">The GetPagedAzureBlobListQuery request.</param>
            /// <param name="cancellationToken">A cancellation token.</param>
            public async Task <Result <FileListModel> > Handle(GetPagedAzureBlobListQuery request, CancellationToken cancellationToken)
            {
                var cloudBlobContainer = await _azureBlobHelper.GetCloudBlobContainerAsync(cancellationToken);

                if (!cloudBlobContainer.IsSuccess)
                {
                    return(Result <FileListModel> .Fail(cloudBlobContainer.Exception));
                }

                var pager = new Pager(request.Page, request.ItemsPerPage);
                var files = await GetPagedListAsync(pager, cloudBlobContainer.Value, request.DirectoryPath, request.FileType, cancellationToken);

                var model = new FileListModel
                {
                    Files = files,
                    Pager = pager
                };

                return(Result <FileListModel> .Success(model));
            }
            /// <summary>
            /// Handle the UploadAzureBlobCommand request.
            /// </summary>
            /// <param name="request">The UploadAzureBlobCommand request.</param>
            /// <param name="cancellationToken">A cancellation token.</param>
            public async Task <Result <string> > Handle(UploadAzureBlobCommand request, CancellationToken cancellationToken)
            {
                // Use Path.GetFileName to obtain the file name, which will strip any path information passed as part of the FileName property.
                var fileName = Path.GetFileName(request.File.FileName);

                // Make the filename url safe
                fileName = fileName.ToUrlSafeFileName();

                var stream = new MemoryStream();
                var result = await ProcessFormFileAsync(request.File, fileName, stream);

                if (!result.IsSuccess)
                {
                    return(result);
                }

                var cloudBlobContainer = await _azureBlobHelper.GetCloudBlobContainerAsync(cancellationToken);

                if (!cloudBlobContainer.IsSuccess)
                {
                    return(Result <string> .Fail(cloudBlobContainer.Exception));
                }

                try
                {
                    var blobName       = $"{request.TargetPath.Trim('/')}/{fileName.Trim('/')}";
                    var cloudBlockBlob = cloudBlobContainer.Value.GetBlockBlobReference(blobName);
                    cloudBlockBlob.Properties.ContentType = fileName.GetMimeType();

                    stream.Position = 0;
                    await cloudBlockBlob.UploadFromStreamAsync(stream);

                    return(Result <string> .Success(cloudBlockBlob.Uri.AbsoluteUri));
                }
                catch (Exception ex)
                {
                    return(Result <string> .Fail(new FileUploadException($"The blob ({fileName}) upload failed", ex)));
                }
            }