Mizuki/Services/DriveService.cs
2025-01-13 00:11:40 +01:00

63 lines
No EOL
1.8 KiB
C#

namespace Mizuki.Services;
/// <summary>
/// The service responsible for managing file uploads.
/// </summary>
public class DriveService
{
/// <summary>
/// The path to the uploads folder.
/// </summary>
private const string UploadsFolder = "./uploads";
/// <summary>
/// The drive service.
/// </summary>
public DriveService()
{
if (!Directory.Exists(UploadsFolder))
Directory.CreateDirectory(UploadsFolder);
}
/// <summary>
/// Opens a file by its filename.
/// </summary>
/// <param name="filename">Its filename.</param>
/// <returns>The file's stream.</returns>
public Stream? OpenFileByFilename(string filename)
{
var actualFilename = Path.GetFileName(filename);
var path = Path.Combine(UploadsFolder, actualFilename);
if (!File.Exists(path))
return null;
return File.OpenRead(path);
}
/// <summary>
/// Deletes a file by its filename.
/// </summary>
/// <param name="filename">Its filename.</param>
public void DeleteFileByFilename(string filename)
{
var actualFilename = Path.GetFileName(filename);
var path = Path.Combine(UploadsFolder, actualFilename);
if (!File.Exists(path))
return;
File.Delete(path);
}
/// <summary>
/// Saves a file with the given filename.
/// </summary>
/// <param name="filename">The filename.</param>
/// <param name="fileStream">The file stream.</param>
public void SaveFileByFilename(string filename, Stream fileStream)
{
var actualFilename = Path.GetFileName(filename);
var path = Path.Combine(UploadsFolder, actualFilename);
using var writeStream = File.OpenWrite(path);
fileStream.CopyTo(writeStream);
}
}