public async Task <(Stream stream, string fileName, string contentType)> DownloadFileAsync( Guid id, ClaimsPrincipal user, CancellationToken cancellationToken) { StoredFile file = await _dbContext.StoredFiles.SingleAsync(f => f.Id == id, cancellationToken); FileAccessUtils.CheckAccess(file, user); Stream stream = await _blobStorageService.DownloadBlobAsync(file.StoredBlobId, user, cancellationToken); return(stream, file.FileName, file.FileContentType); }
public async Task DeleteFileAsync(Guid id, ClaimsPrincipal user, CancellationToken cancellationToken) { StoredFile file = await _dbContext.StoredFiles.SingleAsync(f => f.Id == id, cancellationToken); FileAccessUtils.CheckAccess(file, user); _dbContext.StoredFiles.Remove(file); // These two operations cannot be canceled, so no cancellation token await _blobStorageService.DeleteBlobAsync(file.StoredBlobId, user); await _dbContext.SaveChangesAsync(); }