Next: URL Parameter Echo, Previous: Hello World HTML, Up: Usage Examples [Contents][Index]
The following example implements a file server which will serve files
from the docroot document root set to the current working
directory in this example. Four helper functions are used;
ws-in-directory-p is used to check if the requested path is
within the document root. If not then ws-send-404 is used to
send a default “File Not Found”. If so then the file is served with
ws-send-file (which appropriately sets the mime-type of the
response based on the extension of the file) if it is a file or is
served with ws-send-directory-list if it is a directory.
;;; file-server.el --- serve any files using Emacs Web Server
(lexical-let ((docroot default-directory))
(ws-start
(lambda (request)
(with-slots (process headers) request
(let ((path (substring (cdr (assoc :GET headers)) 1)))
(if (ws-in-directory-p docroot path)
(if (file-directory-p path)
(ws-send-directory-list process
(expand-file-name path docroot) "^[^\.]")
(ws-send-file process (expand-file-name path docroot)))
(ws-send-404 process)))))
9003))