mirror of
https://github.com/DrizzleTime/Foxel.git
synced 2026-05-10 17:43:35 +08:00
52 lines
1.8 KiB
C#
52 lines
1.8 KiB
C#
using Foxel.Services.Attributes;
|
|
using Foxel.Services.Configuration;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace Foxel.Services.Storage.Providers;
|
|
|
|
[StorageProvider(StorageType.Local)]
|
|
public class LocalStorageProvider(IConfigService configService) : IStorageProvider
|
|
{
|
|
private readonly string _baseDirectory = Path.Combine(Directory.GetCurrentDirectory(), "Uploads");
|
|
|
|
public async Task<string> SaveAsync(Stream fileStream, string fileName, string contentType)
|
|
{
|
|
string currentDate = DateTime.Now.ToString("yyyy/MM");
|
|
string folder = Path.Combine(_baseDirectory, currentDate);
|
|
Directory.CreateDirectory(folder);
|
|
|
|
string newFileName = fileName;
|
|
string filePath = Path.Combine(folder, newFileName);
|
|
|
|
await using var output = new FileStream(filePath, FileMode.Create);
|
|
await fileStream.CopyToAsync(output);
|
|
return $"/Uploads/{currentDate}/{newFileName}";
|
|
}
|
|
|
|
public Task DeleteAsync(string storagePath)
|
|
{
|
|
string fullPath = Path.Combine(Directory.GetCurrentDirectory(), storagePath.TrimStart('/'));
|
|
if (File.Exists(fullPath))
|
|
File.Delete(fullPath);
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
public string GetUrl(string? storagePath)
|
|
{
|
|
if (string.IsNullOrEmpty(storagePath))
|
|
return $"/images/unavailable.gif";
|
|
|
|
string serverUrl = configService["AppSettings:ServerUrl"];
|
|
return $"{serverUrl}{storagePath}";
|
|
}
|
|
|
|
public Task<string> DownloadFileAsync(string storagePath)
|
|
{
|
|
string fullPath = Path.Combine(Directory.GetCurrentDirectory(), storagePath.TrimStart('/'));
|
|
if (!File.Exists(fullPath))
|
|
{
|
|
throw new FileNotFoundException($"找不到文件: {fullPath}");
|
|
}
|
|
return Task.FromResult(fullPath);
|
|
}
|
|
} |