首页 > 解决方案 > 如何使用 WebBroker (TIdHTTPWebBrokerBridge) 和 TWebModule 提供从 HTML 文件引用的文件

问题描述

我构建了微型 http 服务器 (Delphi 10.2) 以在线将一些计算返回给客户端。我使用了将 TPageProducer.HTMLFile 设置为本地文件的页面生成器。test.html文件引用了本地磁盘上的 css 文件,例如:在<link rel="stylesheet" href="data/style.css">head 部分。它适用于 Firefox 样式化我的 html。

为了能够从本地文件夹中提供这个 css 文件,我处理了 WebModule.BeforeDispatch:

procedure TWebModule1.WebModuleBeforeDispatch(Sender: TObject; Request: TWebRequest; 
  Response: TWebResponse; var Handled: Boolean);
var
  LocalPath: String;
begin
  if Request.PathInfo.StartsWith('/data/') then
  begin
    LocalPath := DataPath + StringReplace(Request.PathInfo, '/', '\', [rfReplaceAll]);
    if FileExists(LocalPath) then
    begin
      Response.ContentStream := TFileStream.Create(LocalPath, fmShareDenyWrite);
      Assert(Response.ContentStream.Size > 0);
    end;
    Handled := True;
  end;
end;

当我运行我的服务器并转到地址:http://localhost/data/style.css 时,我在浏览器窗口中获得了style.css文件的正确内容。

为什么在使用 http://localhost/test.html 之类的地址时,即使在 OnBeforeDispatch 中正确读取它,它也不用作我的 HTML 文件的样式?

似乎一个文件 (CSS) 是从另一个 (HTML) 引用的,这使事情变得混乱。

标签: windowshttpdelphi

解决方案


推荐阅读