【问题标题】:Converting docx to html with dotnet-mammoth fails at deploy server在部署服务器上使用 dotnet-mammoth 将 docx 转换为 html 失败
【发布时间】:2015-08-07 20:17:06
【问题描述】:

我正在使用dotnet-mammothmammoth.jsedge.js)将 .net 中的 docx 文档转换为 html
我通过它的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 日志文件中保存任何内容。

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

【问题讨论】:

    标签: c# asp.net edge.js


    【解决方案1】:

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

    【讨论】:

    • 我已经按照建议将 Mammoth 更新到了最新版本,效果非常好!我接受这个作为答案(它并没有完全回答最初的问题,但我没有收到任何其他有用的答案,这实际上绕过了这个问题)。谢谢!
    【解决方案2】:

    您可以通过在进程尝试读取文件时获取确切的错误来解决此问题。以下是来自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

    【讨论】:

    • 我使用Server.MapPath(见更新的代码)到一个子文件夹。我拥有该文件夹的权限,因为在我成功上传同一个文件之前的行(我删除了代码的上传部分,因为它工作正常)。
    猜你喜欢
    • 2020-04-18
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2019-12-24
    • 2020-06-07
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    相关资源
    最近更新 更多