Exemplo n.º 1
0
        /// <summary>
        /// Applies given media storage <paramref name="item"/> to <paramref name="media"/> entity as blob.
        /// </summary>
        /// <param name="media">Media item</param>
        /// <param name="item">The source item</param>
        /// <param name="save">Whether to commit changes to <paramref name="media"/> entity to database immediately.</param>
        public async Task ApplyBlobAsync(IMediaAware media, MediaStorageItem item, bool save = false)
        {
            Guard.NotNull(media, nameof(media));

            if (item == null)
            {
                media.ApplyBlob(null);
                if (save)
                {
                    await _db.SaveChangesAsync();
                }
                return;
            }

            using (item)
            {
                if (_db.DataProvider.CanStreamBlob)
                {
                    await SaveFast(media, item);
                }
                else
                {
                    // BLOB stream unsupported
                    var buffer = await item.SourceStream.ToByteArrayAsync();

                    media.ApplyBlob(buffer);
                    media.Size = buffer.Length;
                    if (save)
                    {
                        await _db.SaveChangesAsync();
                    }
                }
            }
        }
Exemplo n.º 2
0
            public override async Task SaveToAsync(Stream stream, IMediaAware media)
            {
                if (stream.CanSeek)
                {
                    stream.SetLength(0);
                }

                await SourceStream.CopyToAsync(stream);

                if (stream.CanSeek)
                {
                    stream.Position = 0;
                }

                media.Size = (int)stream.Length;
            }
Exemplo n.º 3
0
        /// <summary>
        /// Applies Blob to file
        /// </summary>
        /// <param name="blob">The file binary (can be null)</param>
        public static void ApplyBlob(this IMediaAware media, byte[] blob)
        {
            Guard.NotNull(media, nameof(media));

            if (blob == null || blob.LongLength == 0)
            {
                media.MediaStorageId = null;
                media.MediaStorage   = null;
            }
            else
            {
                if (media.MediaStorage != null)
                {
                    media.MediaStorage.Data = blob;
                }
                else
                {
                    media.MediaStorage = new MediaStorage {
                        Data = blob
                    };
                }
            }
        }
Exemplo n.º 4
0
        private async Task <int> SaveFast(IMediaAware media, MediaStorageItem item)
        {
            var sourceStream = item.SourceStream;

            media.Size = (int)sourceStream.Length;

            var streamParam = _db.DataProvider.CreateParameter("p0", sourceStream);

            if (media.MediaStorageId == null)
            {
                // Insert new blob
                var sql = "INSERT INTO MediaStorage (Data) Values(@p0)";
                media.MediaStorageId = await _db.DataProvider.InsertIntoAsync(sql, streamParam);
            }
            else
            {
                // Update existing blob
                var sql     = "UPDATE MediaStorage SET Data = @p0 WHERE Id = @p1";
                var idParam = _db.DataProvider.CreateParameter("p1", media.MediaStorageId.Value);
                await _db.Database.ExecuteSqlRawAsync(sql, streamParam, idParam);
            }

            return(media.MediaStorageId.Value);
        }
Exemplo n.º 5
0
            public override async Task SaveToAsync(Stream stream, IMediaAware media)
            {
                await _image.SaveAsync(stream);

                media.Size = (int)stream.Length;
            }
Exemplo n.º 6
0
 public abstract Task SaveToAsync(Stream stream, IMediaAware media);