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

ASP.NET上传Excel到Upload文件夹报错问题求助

问题根因

执行file.SaveAs()时目标保存路径的父目录不存在,.NET 内置IO方法不会自动创建层级目录,因此直接抛出路径不存在异常,这是你当前报错的核心原因。


修复后的代码

[HttpPost]
public ActionResult UploadBatch(LogonUser logonUser, IEnumerable<HttpPostedFileBase> files)
{
    JsonResultModel result = new JsonResultModel();
    RegexUtilities util = new RegexUtilities();

    try
    {
        // 校验上传文件集合是否为空
        if(files == null || !files.Any())
        {
            result.Status = JsonResultStatus.Failed;
            result.Message = "未检测到有效上传文件";
            return Json(result);
        }
        
        foreach (HttpPostedFileBase file in files)
        {
            // 跳过空文件项
            if(file == null || file.ContentLength == 0)
                continue;
                
            string fileName = Path.GetFileName(file.FileName);
            string upDir = Path.Combine(Request.PhysicalApplicationPath, "Upload", DateTime.Now.ToString("HHmmss"));
            
            // 新增逻辑:目录不存在时自动创建
            if(!Directory.Exists(upDir))
            {
                Directory.CreateDirectory(upDir);
            }
            
            string path = Path.Combine(upDir, fileName);
            file.SaveAs(path);
        }
        
        result.Status = JsonResultStatus.Success;
        result.Message = "文件上传完成";
    } 
    catch (Exception ex)
    {
        result.Status = JsonResultStatus.Failed;
        result.Message = ex.Message;
    }
    return Json(result);
}

其他注意事项

  • 权限配置:确认站点根目录下的Upload文件夹,已给IIS应用程序池对应的运行身份(如IIS_IUSRS组、NETWORK SERVICE账户)授予修改、写入权限。
  • 文件名冲突规避:如果同一秒有多个同名文件上传,后上传的文件会覆盖已有文件,可在文件名前拼接GUID前缀解决,示例:fileName = $"{Guid.NewGuid():N}_{fileName}"。
  • 安全校验:当前代码未校验上传文件类型,建议增加后缀名、文件头校验,避免恶意文件上传到服务器造成安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:15:00