using Microsoft.AspNetCore.Http; using System.IO; namespace zero.Media { public static class MediaManagementExtensions { /// /// Get publicly accessible file path for a media file /// /// ID of a media file /// An optional thumbnail key which returns the path to a generated thumbnail public static async Task GetPublicFilePath(this IMediaManagement media, string mediaId, string thumbnailKey = null) { Media file = await media.GetFile(mediaId); if (file == null) { return null; } return media.GetPublicFilePath(file, thumbnailKey); } /// /// Get file stream for a media file (stream has to be disposed manually) /// public static async Task GetFileStream(this IMediaManagement media, string mediaId, string thumbnailKey = null) { Media file = await media.GetFile(mediaId); if (file == null) { return null; } return await media.GetFileStream(file, thumbnailKey); } /// /// Uploads a file and persists it /// public static async Task> UploadFile(this IMediaManagement media, IFormFile formFile, string folderId = null, CancellationToken cancellationToken = default) { using Stream stream = formFile.OpenReadStream(); return await media.UploadFile(stream, formFile.FileName, folderId, cancellationToken); } /// /// Uploads a file and persists it /// public static async Task> UploadFile(this IMediaManagement media, byte[] fileBytes, string filename, string folderId = null, CancellationToken cancellationToken = default) { using Stream stream = new MemoryStream(fileBytes); return await media.UploadFile(stream, filename, folderId, cancellationToken); } /// /// Rename and store a media folder /// public static async Task> RenameFolder(this IMediaManagement media, Media folder, string newName) { folder.Name = newName; return await media.UpdateFolder(folder); } /// /// Rename and store a media folder /// public static async Task> RenameFolder(this IMediaManagement media, string folderId, string newName) { Media folder = await media.GetFolder(folderId); if (folder == null) { return Result.Fail("@errors.idnotfound"); } return await RenameFolder(media, folder, newName); } /// /// Move a media folder to a new parent /// public static async Task> MoveFolder(this IMediaManagement media, Media folder, string newParentId) { folder.ParentId = newParentId; return await media.UpdateFolder(folder); } /// /// Move a media folder to a new parent /// public static async Task> MoveFolder(this IMediaManagement media, string folderId, string newParentId) { Media folder = await media.GetFolder(folderId); if (folder == null) { return Result.Fail("@errors.idnotfound"); } return await MoveFolder(media, folder, newParentId); } /// /// Deletes a folder by id /// public static async Task> DeleteFolder(this IMediaManagement media, string folderId) { Media folder = await media.GetFolder(folderId); if (folder == null) { return Result.Fail("@errors.idnotfound"); } return await media.DeleteFolder(folder); } } }