IFileStorageService.cs
2.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
namespace Rcs.Application.Services
{
/// <summary>
/// 文件存储服务接口
/// </summary>
public interface IFileStorageService
{
/// <summary>
/// 保存文件
/// </summary>
/// <param name="stream">文件流</param>
/// <param name="fileName">文件名</param>
/// <param name="subDirectory">子目录(可选)</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns>文件存储信息</returns>
Task<FileStorageResult> SaveFileAsync(Stream stream, string fileName, string? subDirectory = null, CancellationToken cancellationToken = default);
/// <summary>
/// 删除文件
/// </summary>
/// <param name="filePath">文件路径</param>
/// <param name="cancellationToken">取消令牌</param>
Task<bool> DeleteFileAsync(string filePath, CancellationToken cancellationToken = default);
/// <summary>
/// 获取文件完整路径
/// </summary>
/// <param name="relativePath">相对路径</param>
/// <returns>完整路径</returns>
string GetFullPath(string relativePath);
/// <summary>
/// 验证文件
/// </summary>
/// <param name="fileName">文件名</param>
/// <param name="fileSize">文件大小(字节)</param>
/// <param name="allowedExtensions">允许的文件扩展名(如:.jpg,.png)</param>
/// <param name="maxSizeInBytes">最大文件大小(字节)</param>
/// <returns>验证结果</returns>
(bool IsValid, string ErrorMessage) ValidateFile(string fileName, long fileSize, string[]? allowedExtensions = null, long? maxSizeInBytes = null);
}
/// <summary>
/// 文件存储结果
/// </summary>
public class FileStorageResult
{
/// <summary>
/// 文件名(带扩展名)
/// </summary>
public string FileName { get; set; } = string.Empty;
/// <summary>
/// 原始文件名
/// </summary>
public string OriginalFileName { get; set; } = string.Empty;
/// <summary>
/// 相对路径(相对于存储根目录)
/// </summary>
public string RelativePath { get; set; } = string.Empty;
/// <summary>
/// 完整路径
/// </summary>
public string FullPath { get; set; } = string.Empty;
/// <summary>
/// 文件大小(字节)
/// </summary>
public long FileSize { get; set; }
/// <summary>
/// 文件扩展名
/// </summary>
public string Extension { get; set; } = string.Empty;
}
}