Пример #1
0
        private async Task ResizeAsync(IAssetEntity asset, Stream bodyStream, ResizeOptions resizeOptions, bool overwrite, CancellationToken ct)
        {
            var suffix = resizeOptions.ToString();

            using (Profiler.Trace("Resize"))
            {
                using (var sourceStream = GetTempStream())
                {
                    using (var destinationStream = GetTempStream())
                    {
                        using (Profiler.Trace("ResizeDownload"))
                        {
                            await assetFileStore.DownloadAsync(asset.AppId.Id, asset.Id, asset.FileVersion, null, sourceStream);

                            sourceStream.Position = 0;
                        }

                        using (Profiler.Trace("ResizeImage"))
                        {
                            try
                            {
                                await assetThumbnailGenerator.CreateThumbnailAsync(sourceStream, destinationStream, resizeOptions);

                                destinationStream.Position = 0;
                            }
                            catch
                            {
                                sourceStream.Position = 0;
                                await sourceStream.CopyToAsync(destinationStream);
                            }
                        }

                        try
                        {
                            using (Profiler.Trace("ResizeUpload"))
                            {
                                await assetFileStore.UploadAsync(asset.AppId.Id, asset.Id, asset.FileVersion, suffix, destinationStream, overwrite);

                                destinationStream.Position = 0;
                            }
                        }
                        catch (AssetAlreadyExistsException)
                        {
                            destinationStream.Position = 0;
                        }

                        await destinationStream.CopyToAsync(bodyStream, ct);
                    }
                }
            }
        }