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);
}
}
}