在上面的基础上,将常量值定义为类,支持从配置文件获取,同时保存目录按月生成目录保存
时间: 2024-03-20 16:44:11 浏览: 107
好的,以下是将常量值定义为类,支持从配置文件获取,同时保存目录按月生成目录保存的示例:
首先,我们创建一个名为 `UploadSettings` 的类,用于保存文件上传的相关设置,包括允许上传的文件类型、文件大小限制、上传目录等:
```csharp
public class UploadSettings
{
public string[] AllowedExtensions { get; set; }
public long MaxFileSize { get; set; }
public string UploadDirectory { get; set; }
}
```
然后,在 `Startup.cs` 中的 `ConfigureServices` 方法中读取配置文件,并将配置文件中的值映射到 `UploadSettings` 类的实例中:
```csharp
services.Configure<UploadSettings>(Configuration.GetSection("UploadSettings"));
```
接着,在 `UploadController` 中使用 `IOptions<UploadSettings>` 将配置文件中的值注入到控制器中:
```csharp
private readonly IWebHostEnvironment _env;
private readonly UploadSettings _settings;
public UploadController(IWebHostEnvironment env, IOptions<UploadSettings> options)
{
_env = env;
_settings = options.Value;
}
```
最后,修改上传文件的代码,将保存目录按照月份生成目录保存:
```csharp
// 文件上传处理接口
[HttpPost("upload")]
public async Task<IActionResult> Upload(IFormFile file)
{
// 判断文件是否为空
if (file == null || file.Length == 0)
return BadRequest("文件为空");
// 判断文件大小是否超过限制
if (file.Length > _settings.MaxFileSize)
return BadRequest("文件大小超过限制");
// 获取文件后缀名
var fileExtension = Path.GetExtension(file.FileName);
// 判断文件后缀名是否符合要求
if (!_settings.AllowedExtensions.Contains(fileExtension.ToLower()))
return BadRequest("不支持的文件类型");
// 生成文件名
var fileName = Guid.NewGuid().ToString() + fileExtension;
// 生成文件保存路径
var year = DateTime.Now.Year.ToString();
var month = DateTime.Now.Month.ToString("D2");
var relativePath = Path.Combine(year, month);
var absolutePath = Path.Combine(_settings.UploadDirectory, relativePath);
Directory.CreateDirectory(absolutePath);
var filePath = Path.Combine(absolutePath, fileName);
// 保存文件到指定路径
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
}
// 返回上传成功信息
return Ok(new { fileName });
}
```
上述代码中,我们使用了 `_settings` 字段代替了之前的常量值,并且将上传目录按照月份生成目录保存。在上传文件时,先获取当前年份和月份,并生成相应的相对路径和绝对路径,然后创建目录并保存文件。最后返回上传成功信息。
注意,为了让上述代码生效,需要在 `appsettings.json` 中添加 `UploadSettings` 节点,并设置允许上传的文件类型、文件大小限制和上传目录等属性,例如:
```json
{
"UploadSettings": {
"AllowedExtensions": [ ".jpg", ".jpeg", ".png", ".gif" ],
"MaxFileSize": 10485760,
"UploadDirectory": "uploads"
}
}
```
阅读全文