使用 dotnet-mammoth 将 docx 转换为 html 在部署服务器上失败

Converting docx to html with dotnet-mammoth fails at deploy server

我正在使用 dotnet-mammoth (mammoth.js with edge.js) 将 docx 文档转换为 .nethtml
我通过 nuget package 将它添加到我的项目中。

我正在使用示例提供的代码,它在我的开发环境 (运行 IIS Express) 中正常工作:

var documentConverter = new Mammoth.DocumentConverter();
var result = documentConverter.ConvertToHtml(Server.MapPath("~/files/document.docx")); // problem here at production enviroment
string theResult = result.Value

但是,一旦我将其部署到生产服务器,当执行的代码到达 documentConverter.ConvertToHtml() 方法时,它会将我重定向到登录页面。不显示任何错误消息,不在 IIS 日志文件中保存任何内容。

如果我删除该行,其他一切都会正常执行。 我认为这可能是与权限相关的问题,但我不知道它可能是什么。有什么想法吗?

您可以通过在进程尝试读取文件时获取准确的错误来解决此问题。下面是来自 dotnet-mammoth DocumentConverter.cs 的代码。如下所示,它正在尝试读取要发送到 edge

的所有字节
public Result<string> ConvertToHtml(string path)
        {
            var mammothJs = ReadResource("Mammoth.mammoth.browser.js") + ReadResource("Mammoth.mammoth.edge.js");

            var f = Edge.Func(mammothJs);
            var result = f(File.ReadAllBytes(path));
            Task.WaitAll(result);

            return ReadResult(result.Result);
        }

我想你给了输入的绝对路径。在这种情况下,托管 Web 应用程序的应用程序池的应用程序身份应该可以访问绝对路径。

如果指定的路径在 web 根目录中 -(不建议) - 但如果是,那么您可以使用 Server.MapPath

NuGet 上最新版本的 Mammoth 不再使用 edge.js,现在只是 .NET 代码,因此应该可以更可靠地工作。