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

ASP.NET相对路径上传Word转PDF时文件找不到异常解决方案求助

问题根源

你代码里有两个核心错误直接导致该报错:

  • Application.Documents.Open() 方法要求传入的参数是本地Word文件的绝对路径字符串,你当前传入的是 IFormFile 类型的上传文件对象,Office组件根本无法识别该参数,自然提示文件不存在。
  • 执行逻辑顺序颠倒:你先执行了Word转PDF的逻辑,之后才把上传的文件流写入本地磁盘,调用转换方法时目标Word文件还没被保存到服务器上,必然找不到文件。

修正后代码(仅修改HttpPost的Index1方法)

[HttpPost]
public IActionResult Index1(IFormFile[] files)
{
    // 遍历所有文件
    foreach (var file in files)
    {
        // 过滤非Word文件,避免无效转换
        var ext = Path.GetExtension(file.FileName).ToLower();
        if (ext != ".doc" && ext != ".docx")
        {
            continue;
        }
        
        // 从浏览器端获取文件名
        var fileName = System.IO.Path.GetFileName(file.FileName);
        // 生成上传文件的存储路径
        var filePath = Path.Combine(Directory.GetCurrentDirectory(), "upload", fileName);
        // 生成转换后PDF的存储路径
        var pdfPath = Path.Combine(Directory.GetCurrentDirectory(), "upload", $"{Path.GetFileNameWithoutExtension(fileName)}.pdf");

        // 检查是否存在同名文件,存在则删除
        if (System.IO.File.Exists(filePath))
        {
            System.IO.File.Delete(filePath);
        }
        if (System.IO.File.Exists(pdfPath))
        {
            System.IO.File.Delete(pdfPath);
        }

        // 先把上传的Word文件保存到本地
        using (var localFile = System.IO.File.OpenWrite(filePath))
        using (var uploadedFile = file.OpenReadStream())
        {
            uploadedFile.CopyTo(localFile);
        }

        // 保存完成后再执行转换逻辑
        var appWord = new Application();
        if (appWord.Documents != null)
        {
            // 传入本地文件的绝对路径
            var wordDocument = appWord.Documents.Open(filePath);
            if (wordDocument != null)
            {
                // 导出PDF到指定路径
                wordDocument.ExportAsFixedFormat(pdfPath, WdExportFormat.wdExportFormatPDF);
                wordDocument.Close();
            }
            appWord.Quit();
            // 释放Office进程,避免内存泄漏
            System.Runtime.InteropServices.Marshal.ReleaseComObject(appWord);
        }
    }
    ViewBag.Message = "文件上传成功";

    // 从服务器获取文件
    var model = new FilesViewModel();
    foreach (var item in Directory.GetFiles(Path.Combine(Directory.GetCurrentDirectory(), "upload")))
    {
        model.Files.Add(
            new FileDetails { Name = System.IO.Path.GetFileName(item), Path = item });
    }
    return View(model);
}

额外注意事项

  • 如果使用Office Interop方案,需要保证服务器上安装了对应版本的微软Office,同时要给站点运行的应用程序池身份开启Office组件的访问权限,否则仍会出现权限类报错。
  • 服务端场景更推荐使用无Office依赖的NuGet包实现转换,比如FreeSpire.Doc,无需安装Office,权限要求更低,也不会出现进程残留的问题。

内容的提问来源于stack exchange,提问作者Panait Rares Horia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:36:01