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

本文关键字:转换 docx html 失败 dotnet-mammoth 服务器 部署 | 更新日期: 2023-09-27 18:06:51

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

我正在使用示例提供的代码,它在我的开发环境(运行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将docx转换为html失败

最新版本的猛犸在NuGet上不再使用edge.js,现在只是。net代码,所以应该更可靠地工作。

可以通过获取进程试图读取文件时的准确错误来解决这个问题。下面是来自dotnet-mammoth DocumentConverter.cs的代码。如下所示,在调用时,它试图读取要发送到边缘

的所有字节
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