c# - 上传文件后自动重命名文件
问题描述
我有一个音乐文件夹,如下图所示
和下面的代码上传音乐
private IWebHostEnvironment _environment;
public UploadFileModel(IWebHostEnvironment environment)
{
_environment = environment;
}
[BindProperty]
public IFormFile Upload { get; set; }
public async Task OnPostAsync()
{
var file = Path.Combine(_environment.ContentRootPath, "wwwroot/music", Upload.FileName);
using (var fileStream = new FileStream(file, FileMode.Create))
{
await Upload.CopyToAsync(fileStream);
}
}
在cshtml里面
<form method="post" enctype="multipart/form-data">
<input type="file" asp-for="Upload" accept=".mp3"/>
<input type="submit" />
</form>
我想要做的是自动将每个新的 mp3 文件重命名为"Track{last_number + 1}.mp3"
,以防链中缺少文件来代替它。
解决方案
我按照@John 的步骤编写了以下代码。谢谢@约翰。
private IWebHostEnvironment _environment;
public UploadFileModel(IWebHostEnvironment environment)
{
_environment = environment;
}
[BindProperty]
public IFormFile Upload { get; set; }
public async Task OnPostAsync()
{
var musicFileName = "Track0.mp3";
var musicDirectory = Path.Combine(_environment.ContentRootPath, "wwwroot/music");
var musicDirectoryInfo = new DirectoryInfo(musicDirectory);
var fileNumbers = musicDirectoryInfo.GetFiles()
.Where(x => !String.IsNullOrEmpty(x.Name))
.Select(x => GetFileNumber(x.Name))
.OrderBy(x => x)
.ToList();
if (fileNumbers.Count > 0)
{
var fileNumber = fileNumbers.Last() + 1;
var missingNumber = GetMissingNumber(fileNumbers);
if (missingNumber.HasValue)
{
fileNumber = missingNumber.Value;
}
musicFileName = $"Track{fileNumber}.mp3";
}
var file = Path.Combine(_environment.ContentRootPath, "wwwroot/music", musicFileName);
using (var fileStream = new FileStream(file, FileMode.Create))
{
await Upload.CopyToAsync(fileStream);
}
}
private int GetFileNumber(String musicName)
{
var lastFileNumber = musicName.Replace("Track", "").Replace(".mp3", "");
var fileNumber = Convert.ToInt32(lastFileNumber);
return fileNumber;
}
private static int? GetMissingNumber(List<int> numbers)
{
var missingNumbers = Enumerable.Range(0, numbers.Last()).Except(numbers).ToList();
if (missingNumbers.Count > 0)
return missingNumbers.FirstOrDefault();
return null;
}
推荐阅读
- symfony - fosckeditor bundle - 无法配置额外的插件
- python - Google Colab:如何循环浏览文件夹中的图像?
- python - 在 django 项目上安装 extdirect 的问题
- mysql - 带有 MySQL 的 Spring Boot 正在立即关闭
- hive - 为什么 Hive 返回这个结果?
- mvvm - 谁能帮助理解这个 Knockout Observable?
- windows - 如何设置 SetDialogDpiChangeBehavior 的掩码和值参数
- kubernetes - Kubernetes NFS 服务器 pod mount 适用于 pod ip 但不适用于 kubernetes 服务
- javascript - 如何使用 momentjs 或 vanilla JS 将 ISO 日期格式转换为 yyyy-MM-dd 格式?
- r - 当 knitr 中的 results='hold' 时单独输出