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))