Cowboy:你如何呈现来自处理程序的静态 html 文件?

Posted

技术标签:

【中文标题】Cowboy:你如何呈现来自处理程序的静态 html 文件?【英文标题】:Cowboy: How do you present a static html file from a handler? 【发布时间】:2020-09-07 03:17:31 【问题描述】:

我正在使用牛仔,我有一个 post 方法用于检查用户名和密码的处理程序。这一切都很好。

许多示例展示了如何返回简单的 hello 消息作为响应。不幸的是,我想提供一个 html 文件以响应正确的详细信息,但我看不到如何从处理程序中执行此操作?

我知道如何使用牛仔静态文件处理程序提供静态文件,但我不知道如何通过我自己的处理程序提供静态文件。

【问题讨论】:

您好,进一步阅读 Nine Nines 网站表明您可以添加一个 sendfile 元组。 ninenines.eu/docs/en/cowboy/2.5/guide/resp 元组必须包含文件长度。任何人都知道如何使用 erlang 有效地计算文件长度?谢谢 以下代码有效,但我必须手动输入文件长度。请求 = cowboy_req:reply(200, #> => >, sendfile, 0, 2591, "/home/cowboy/examples/eventsource/priv /Device.html", Req0),此解决方案的两个问题是:1) 您必须手动设置文件长度。不确定如何在 Erlang 中执行此操作。 2)您必须提供文件的完整路径。想使用priv_dir。 MPC 【参考方案1】:

最后一个使用 priv_dir 并解决文件大小问题的解决方案:

FileSize=filelib:file_size(code:priv_dir(eventsource)++"/CP.html"),

Req = cowboy_req:reply(200, #<<"content-type">> => <<"text/html">>, 
      sendfile, 0, FileSize, code:priv_dir(eventsource) ++ "/CP.html", Req0),

【讨论】:

以上是关于Cowboy:你如何呈现来自处理程序的静态 html 文件?的主要内容,如果未能解决你的问题,请参考以下文章

当客户端关闭连接时,Cowboy/Ranch 杀死处理程序进程

如何将正文设置为 Cowboy POST 响应

[erlang]cowboy handler模块的使用

Cowboy 框架:发送 HTTP 调用

Erlang cowboy 处理不规范的client

为 Cowboy REST API 启用 CORS