Использование CompoJure, Hiccup и Ring для загрузки файла
-
11-10-2019 - |
Вопрос
Чтобы загрузить файл на сервер, который я пишу в Clojure, мне нужна клиентская форма, которая выглядит примерно так:
<form action="/file" method="post" enctype="multipart/form-data">
<input name="file" type="file" size="20" />
<input type="submit" name="submit" value="submit" />
Однако я не могу найти документацию для икота или в Compojure, чтобы создать подобную форму. Образец, который у меня есть, выглядит так:
[:h2 "Choose a file to upload"]
:form {:method "post" :action "/upload"}
[:input.math {:type "text" :name "a"}] [:span.math " + "]
[:input.math {:type "text" :name "b"}] [:br]
Итак, мой вопрос заключается в том, где документация, чтобы найти, как это должно быть изменено, чтобы сделать форму, которая будет загружать файл?
Решение
Поддержка загрузки файла для CompoJure можно найти в multipart-params
Кольцо промежуточного программного обеспечения. Вот несколько примеров того, как его использовать:
- https://gist.github.com/562624/1DF418E4851E68952FC466713F377DF2E653AFDB
- http://www.prodevtips.com/2010/12/19/file-uploads-with-clojure-ring-and-compojure/
Всегда посмотрите на документацию по промежуточной программе кольца, она полна отличного кода!
Обновлять: Не прочитал ваш вопрос правильно в первый раз! Чтобы генерировать подобную форму:
<form action="/file" method="post" enctype="multipart/form-data">
<input name="file" type="file" size="20" />
<input type="submit" name="submit" value="submit" />
</form>
Это должно делать свое дело:
[:form {:action "/file" :method "post" :enctype "multipart/form-data"}
[:input {:name "file" :type "file" :size "20"}]
[:input {:type "submit" :name "submit" :value "submit"]]
Я сделал это из памяти, так что это не проверено.
Другие советы
[:input {:type "submit" :name "submit" :value "submit"]]
Отсутствующий }
[:input {:type "submit" :name "submit" :value "submit"]}]