;; upload.scm ;; run with csi -s upload.scm ;; and point your browser to http://localhost:8080 (use spiffy intarweb uri-common multipart-form-data) (create-directory "./uploads" #t) (change-directory "./uploads") (define (app c) ;; saves any MULTIPART files in form-data to disk. returns list of ;; filenames. (define (save-files form-data) (filter-map (lambda (pair) ;; <-- pair is form-key . form-value (let ((value (cdr pair))) (and (multipart-file? value) (with-output-to-file (multipart-file-filename value) (lambda () (display (read-string #f (multipart-file-port value))))) (multipart-file-filename value)))) form-data)) (define form-data (and (eq? 'POST (request-method (current-request))) (read-multipart-form-data (current-request)))) (define filenames (if form-data (save-files form-data) '())) (send-response body: (conc "
Uploads go here: " (current-directory) "/upload

You uploaded:

"))) (vhost-map `((".*" . ,(lambda (c) (app c))))) (start-server)