如果我将Prolog HTTP服务器绑定到端口9000的localhost
,我该如何让Prolog为我的图像生成正确的路径?例如,如果我的.pl
文件和.jpg
或.png
文件位于桌面上,如何让服务器生成如下代码:
<img src="C:\Users\Luka\\Desktop\ImageName.ext"/>
,其中“ext”代表扩展名。我已经看了SWI-Prolog和this tutorial的文档,但我发现所有抽象路径都很混乱。我在Web服务器方面有很多经验,但这有很大的不同,我在理解它时遇到了很多问题。
这是我的尝试,由我在SWI-Prolog文档和上述教程中学到的(或至少我认为的)组成:
:- use_module(library(http/thread_httpd)).
:- use_module(library(http/http_dispatch)).
:- use_module(library(http/http_parameters)).
:- use_module(library(http/html_write)).
file_search_path('*', 'C:\\Users\\Luka\\Desktop\\').
server(Port) :-
http_server(http_dispatch, [port(Port)]).
:- http_handler(root(.), render_base, []).
:- http_handler('/form', process_form, []).
process_form(Request) :-
http_parameters(Request,
[name(Name,[atom])]),
reply_html_page('Posted data: ',['',Name]).
render_base(_Request) :-
reply_html_page(
title('Naslov'),
img([src='/image.png', alt='Incident'])
).
再次感谢您的巨大耐心。 : - )
答案 0 :(得分:7)
确实,解决问题并不简单。请仔细阅读this&#39;如何&#39;页面,Serving many 'server support' files
部分。
以下是我测试的代码:
http:location(images, root(images), []).
user:file_search_path(icons, '/home/carlo/prolog').
:- http_handler(images(.), serve_files_in_directory(icons), [prefix]).
以及使用该资源的HTML
intro -->
html([p(ol([li('select a path'),
li('scan resources from it'),
li('RDF-ize them'),
li('browse with foldable SVG')
])),
\sep,
'png before', img(src='images/swipl.png'), 'png after',
\sep,
'jpeg before', img(src='/images/swipl.jpeg'), 'jpeg after'
]).
我注意到,img(src='images/swipl.png')
和 img(src='/images/swipl.jpeg')
这两个规范都有效,而且这个功能&#39;有助于模糊界面行为。
这里输出
HTH
答案 1 :(得分:1)
请记住,prolog服务器确实是SERVER,而不是apache的插件。 这意味着你需要prolog服务图像。当然,让你的web服务器发送静态文件非常方便,所以Carlo的例子确实都提供了image目录和html来包含它。