public async Task <UserResult> Get(string url, string?bucketName, int?width)
        {
            var userResult = new UserResult(url, bucketName ?? _defaultBucketName, width ?? _defaultWidth, $"{ShortId.Generate(true, false, 8)}");

            if (!url.Exists())
            {
                userResult.ErrorMessage = "Url does not exist.";
                return(userResult);
            }

            if (!_validBucketNames.Contains(userResult.Input.BucketName))
            {
                userResult.ErrorMessage = "Specified bucket name does not exist.";
                return(userResult);
            }

            if (url.StartsWith("https://photos.app.goo.gl/"))
            {
                for (int i = 0; i <= 4; i++)
                {
                    var result = await _scraper.FindImageSourcesAsync(url, userResult.Input.Width);

                    if (result.Success && result.Message.Length > 0)
                    {
                        userResult.ErrorMessage          = null;
                        userResult.Input.IntermediateUrl = result.Message;
                        url = result.Message;
                        break;
                    }
                    else
                    {
                        userResult.ErrorMessage = result.Message;
                    }
                }

                if (userResult.Input.IntermediateUrl == null)
                {
                    userResult.ErrorMessage = userResult.ErrorMessage ?? "Could not obtain image path.";
                    return(userResult);
                }
            }

            var downloadResult = await DownloadFileAsync(url);

            if (downloadResult.Success && downloadResult.Data.Length > 0)
            {
                var uploadResult = await UploadFileAsync(downloadResult.Data, userResult.Input.BucketName, userResult.Input.KeyName);

                if (uploadResult.Success && uploadResult.Message.Length > 0)
                {
                    userResult.Success            = true;
                    userResult.Output.SizeInBytes = downloadResult.Data.Length;
                    return(userResult);
                }
                else
                {
                    userResult.ErrorMessage = uploadResult.Message;
                    return(userResult);
                }
            }
            else
            {
                userResult.ErrorMessage = downloadResult.Message;
                return(userResult);
            }
        }