|
5 | 5 | namespace BootstrapBlazor.Components; |
6 | 6 |
|
7 | 7 | /// <summary> |
8 | | -/// 文件信息 |
| 8 | +/// Editor 上传文件信息类 |
9 | 9 | /// </summary> |
10 | | -public class EditorUploadFile |
| 10 | +public class EditorUploadFile(string fileName, string contentType, long fileSize, Stream stream) |
11 | 11 | { |
12 | 12 | /// <summary> |
13 | | - /// 文件名 |
| 13 | + /// 获得/设置 文件名 |
14 | 14 | /// </summary> |
15 | | - public string? FileName { get; set; } |
| 15 | + public string FileName => fileName; |
16 | 16 |
|
17 | 17 | /// <summary> |
18 | | - /// 文件大小 |
| 18 | + /// 获得/设置 文件大小 |
19 | 19 | /// </summary> |
20 | | - public long FileSize { get; set; } |
| 20 | + public long FileSize => fileSize; |
21 | 21 |
|
22 | 22 | /// <summary> |
23 | | - /// 最后修改日期 |
| 23 | + /// 获得/设置 文件类型 |
24 | 24 | /// </summary> |
25 | | - public string? LastModified { get; set; } |
| 25 | + public string ContentType => contentType; |
26 | 26 |
|
27 | 27 | /// <summary> |
28 | | - /// 文件类型 |
| 28 | + /// 获得/设置 上传的文件流 |
29 | 29 | /// </summary> |
30 | | - public string? ContentType { get; set; } |
| 30 | + public Stream Stream => stream; |
31 | 31 |
|
32 | 32 | /// <summary> |
33 | | - /// 上传的文件流 |
| 33 | + /// 获得/设置 错误信息 |
34 | 34 | /// </summary> |
35 | | - public Stream? UploadStream { get; set; } |
36 | | - |
37 | | - /// <summary> |
38 | | - /// 文件索引 |
39 | | - /// <para>用于标识文件在上传列表中的位置</para> |
40 | | - /// <para>例如在上传多个文件时可以通过此属性区分每个文件的索引位置</para> |
41 | | - /// </summary> |
42 | | - public int Index { get; set; } |
43 | | - |
44 | | - /// <summary> |
45 | | - /// 返回码,0为成功,非0失败 |
46 | | - /// </summary> |
47 | | - public int Code { get; set; } |
48 | | - |
49 | | - /// <summary> |
50 | | - /// 错误信息 |
51 | | - /// </summary> |
52 | | - public string? Error { get; set; } |
53 | | - |
54 | | - /// <summary> |
55 | | - /// 保存到文件 |
56 | | - /// </summary> |
57 | | - /// <param name="fileName"></param> |
58 | | - /// <param name="token"></param> |
59 | | - /// <returns></returns> |
60 | | - public async Task<bool> SaveToFile(string fileName, CancellationToken token = default) |
61 | | - { |
62 | | - var ret = false; |
63 | | - if (UploadStream != null) |
64 | | - { |
65 | | - // 文件保护,如果文件存在则先删除 |
66 | | - if (System.IO.File.Exists(fileName)) |
67 | | - { |
68 | | - try |
69 | | - { |
70 | | - System.IO.File.Delete(fileName); |
71 | | - } |
72 | | - catch (Exception ex) |
73 | | - { |
74 | | - Code = 1002; |
75 | | - Error = ex.Message; |
76 | | - } |
77 | | - } |
78 | | - |
79 | | - var folder = Path.GetDirectoryName(fileName); |
80 | | - if (!string.IsNullOrEmpty(folder) && !Directory.Exists(folder)) |
81 | | - { |
82 | | - Directory.CreateDirectory(folder); |
83 | | - } |
84 | | - |
85 | | - if (Code == 0) |
86 | | - { |
87 | | - using var uploadFile = File.OpenWrite(fileName); |
88 | | - |
89 | | - try |
90 | | - { |
91 | | - // 打开文件流 |
92 | | - var stream = UploadStream; |
93 | | - |
94 | | - var buffer = new byte[4 * 1096]; |
95 | | - int bytesRead = 0; |
96 | | - |
97 | | - // 开始读取文件 |
98 | | - while ((bytesRead = await stream.ReadAsync(buffer, token)) > 0) |
99 | | - { |
100 | | - await uploadFile.WriteAsync(buffer.AsMemory(0, bytesRead), token); |
101 | | - |
102 | | - } |
103 | | - ret = true; |
104 | | - } |
105 | | - catch (Exception ex) |
106 | | - { |
107 | | - Code = 1003; |
108 | | - Error = ex.Message; |
109 | | - } |
110 | | - } |
111 | | - } |
112 | | - return ret; |
113 | | - } |
114 | | - |
| 35 | + public Exception? Error { get; set; } |
115 | 36 | } |
0 commit comments