2011-01-17 12 views
5

zum Hochladen einer Datei auf einen Server hochladen Ich bin in Clojure schreibe ich eine Client-Form benötigen, die etwa wie folgt aussieht:Mit Compojure, Schluckauf und Ring eine Datei

<form action="/file" method="post" enctype="multipart/form-data"> 
<input name="file" type="file" size="20" /> 
<input type="submit" name="submit" value="submit" /> 

Jedoch habe ich nicht finden können, die Dokumentation für Hiccup oder in Compojure, um eine solche Form zu erstellen. Die Probe Ich habe sieht wie folgt aus:

[: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] 

Also meine Frage ist, wo ist die Dokumentation zu finden, wie diese geändert werden sollte, um eine Form zu machen, die eine Datei hochladen, werden?

Antwort

6

Die Datei-Upload-Unterstützung für Compojure kann in der multipart-params Ring-Middleware gefunden werden. Hier einige Beispiele dafür, wie es zu benutzen:

haben immer einen Blick auf Ring-Middleware-Dokumentation ist es voll von großem Code!

Update: Ich habe deine Frage beim ersten Mal nicht richtig gelesen! Um ein Formular wie diese zu erzeugen:

<form action="/file" method="post" enctype="multipart/form-data"> 
    <input name="file" type="file" size="20" /> 
    <input type="submit" name="submit" value="submit" /> 
</form> 

, die den Trick tun sollten:

[:form {:action "/file" :method "post" :enctype "multipart/form-data"} 
[:input {:name "file" :type "file" :size "20"}] 
[:input {:type "submit" :name "submit" :value "submit"]] 

Ich habe es aus dem Gedächtnis gemacht, so dass es nicht getestet ist.

+0

Danke Sir, das half mir zum Laufen zu bringen. Ich bin mir immer noch nicht sicher, warum das Beispiel, mit dem ich angefangen habe, input.math hat (ich finde keine Dokumentation darüber, woher die Mathematik kommt). Ich habe auch Schwierigkeiten, die Ringdokumentation zu finden, oder muss ich sie nur mit Autodoc erstellen? – justinhj

+0

Die Ringdokumentation kann dort gefunden werden: http://mmcgrana.github.com/ring/ –

+1

Auch der .math-Teil ist eine Verknüpfung, um HTML-Elementen ein Klassenattribut hinzuzufügen. In Hiccup können Tag-Schlüsselwörter mit einem CSS-Selektor wie id und class attributiert werden, zB: '[: span # my_id.class1.class2 ...]' ist äquivalent zu '[: span {: id" my_id ": Klasse "Klasse1 Klasse2"} ...] ' –

1
[:input {:type "submit" :name "submit" :value "submit"]] 

Fehlende }

[:input {:type "submit" :name "submit" :value "submit"]}]