On 11/26/06, vedm mlist@rogers.com wrote:
When I point the browser to a directory, I want to see a list of the files in that directory - how can I do this with hunchentoot?
-- vedm
(defun get-uploaded-files () (let* ((pathnames nil)) (cl-fad:walk-directory (get-config-path :upload-path) (lambda (pathname) (push pathname pathnames))) pathnames))
To get a list of all the files.
(create-dynamic-directory-dispatcher (get-config-path :upload-path) "/files/") in the *dispatch-table* to make them downloadable.
Dispatcher defined as:
(defun join-directories (root relative-path) (let ((root-directory (pathname-directory root)) (relative-directory (pathname-directory relative-path))) (append root-directory (remove-if 'symbolp relative-directory))))
(defun create-dynamic-directory-dispatcher (directory prefix) (lambda (request) (let ((script-name (tbnl:script-name request)) (mismatch (mismatch (tbnl:script-name request) prefix :test #'char=))) (and mismatch (>= mismatch (length prefix)) (let ((path (make-pathname :directory (join-directories directory (subseq script-name mismatch)) :name (pathname-name script-name) :type (pathname-type script-name)))) (unless (or (cl-fad:directory-pathname-p path) (not (probe-file path))) (lambda () (tbnl:handle-static-file path))))))))
depends on cl-fad. The code is not exceptionally beautiful, yet it should give you enough ideas to do something more reasonable.
Ignas Mikalajūnas