(asdf:operate 'asdf:load-op :cl-who)Данный пример выводит форму, в которой предлагается указать файл для загрузки. После отправки формы на сервер отображается страница с информацией о загруженном файле: имя, content-type, а также выводится его содержимое (по этой причине данный пример работоспособен только с текстовыми файлами). Код в основном повторяет пример про обработку POST-запроса, но теперь вместо строки в форме отправляется файл. Основное отличие состоит в том, что вызов hunchentoot:post-parameter для файла возвращает не строку, а список, содержащий путь к загруженному файлу (во временной директории hunchentoot:*tmp-directory*), его имя и content-type.
(asdf:operate 'asdf:load-op :restas)
(restas:defsite :restas.example-3
(:use :cl))
(in-package :restas.example-3)
(define-route main ("" :method :get)
(who:with-html-output-to-string (out)
(:html
(:body
((:form :method :post
:enctype "multipart/form-data")
((:input :name "file"
:type "file"))
(:br)
((:input :type "submit"
:value "Send")))))))
(define-route main/post ("" :method :post)
(let ((file-info (hunchentoot:post-parameter "file")))
(if file-info
(who:with-html-output-to-string (out)
(:html
(:body
(:div
(:b "Name: ")
(who:str (second file-info)))
(:div
(:b "Content-Type: ")
(who:str (third file-info)))
(:div
(:b "Content")
(:br)
(who:str (hunchentoot:escape-for-html (alexandria:read-file-into-string (first file-info)))))
((:a :href (restas:genurl 'main)) "Try again"))))
(restas:redirect 'main))))
(restas:start-site :restas.example-3 :port 8080)
вторник, 19 января 2010 г.
Простейшая загрузка файла с помощью RESTAS
После предыдущего поста меня попросили показать пример использования RESTAS для загрузки файла. Формально говоря, этот вопрос не имеет отношения к RESTAS, ибо решается за счёт средств hunchentoot, но тем не менее:
Подписаться на:
Комментарии к сообщению (Atom)
ОМГ! Код в лучших традициях похапэ... а как же MVC? O_o
ОтветитьУдалитьИ да... даже в UnCommonWeb (он кстати жив еще?) были темплейты... а тут безобразие какое-то :)
ОтветитьУдалить@Cy6erBr4in
ОтветитьУдалитьMVC в стиле RoR или Django не нужен.
В предыдущем посте я как раз и указывал, что лучше не использовать cl-who в реальных приложениях.