You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#文件上传函数修改:如何检查文件名是否已存在并添加新GUID重命名保存

文件上传函数优化:同名文件检测与自动重命名

我来帮你调整这个上传函数,实现检测目标目录是否存在同名文件,存在则自动添加GUID重命名的功能。咱们基于你的现有代码修改,核心是先检查原文件名是否存在,再决定最终的保存文件名:

public string UploadStorageFile(StorageModel newFile, int userId) {
    string savedFileName = null;
    if(newFile.FileName != null) {
        string uploadsFolder = Path.Combine(_webHostEnvironment.WebRootPath, $"repositories/{userId}");
        // 确保上传目录存在
        if (!Directory.Exists(uploadsFolder)) {
            Directory.CreateDirectory(uploadsFolder);
        }

        // 获取用户上传的原始文件名
        string originalFileName = newFile.FileName.FileName;
        // 构造原始文件的目标路径
        string originalFilePath = Path.Combine(uploadsFolder, originalFileName);

        // 检查是否存在同名文件
        if (File.Exists(originalFilePath)) {
            // 分割文件名和后缀,在文件名主体后添加GUID
            string fileExtension = Path.GetExtension(originalFileName);
            string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(originalFileName);
            savedFileName = $"{fileNameWithoutExtension}_{Guid.NewGuid().ToString()}{fileExtension}";
        } else {
            // 不存在同名文件,直接使用原始文件名
            savedFileName = originalFileName;
        }

        // 最终文件路径
        string finalFilePath = Path.Combine(uploadsFolder, savedFileName);
        // 写入文件流
        using(var fileStream = new FileStream(finalFilePath, FileMode.Create)) {
            newFile.FileName.CopyTo(fileStream);
        }
    }
    return savedFileName;
}

关键逻辑说明

  • 同名文件检测:通过File.Exists(originalFilePath)判断目标目录中是否存在与用户上传原文件名完全一致的文件
  • 安全的文件名处理:用Path.GetExtension和Path.GetFileNameWithoutExtension拆分文件名与后缀,避免GUID破坏文件格式(比如不会出现test.txt_xxxxxx这类错误命名)
  • 可选命名规则:如果你更偏好和原代码一致的「GUID前缀」格式,可以把重命名逻辑改成savedFileName = $"{Guid.NewGuid().ToString()}_{originalFileName}",这样实现更简单
  • 目录保障:保留了你原有的目录检查与创建逻辑,确保上传路径始终有效

额外优化建议

如果想要完全避免极端情况下的文件名冲突(GUID重复概率极低,但可做兜底),可以添加循环检测逻辑:生成带GUID的文件名后,再检查一次该文件名是否存在,若存在则重新生成GUID,直到得到唯一文件名。

内容的提问来源于stack exchange,提问作者Adam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 18:17:28