/// <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(); } } } }
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; }
/// <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 }; } } }
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); }
public override async Task SaveToAsync(Stream stream, IMediaAware media) { await _image.SaveAsync(stream); media.Size = (int)stream.Length; }
public abstract Task SaveToAsync(Stream stream, IMediaAware media);