Ich habe eine Anwendung geschrieben mit Spray , und ich habe eine Seite mit einem <input type="file" name="foo">
form-Element, das bekommt POSTed zu /fileUpload
.
Ich habe eine Spray-Route eingerichtet, um den Pfad /fileUpload
mit diesem Code anzuhören:
Ich kann nicht herausfinden, wie man den POST-Body bekommt und die Datei in den Griff bekommt, und ich kann keine Beispiele online finden.
Es muss möglich sein, eine Datei zu empfangen und sie mit Spray oder sogar einfachem Scala oder Java zu verarbeiten, aber ich weiß nicht, wie ich es machen soll.
Kann jemand helfen?
Danke!
Das ist mit Spray möglich, obwohl ich nicht überprüft habe, ob das Streaming richtig funktioniert. Ich habe ein bisschen gevögelt und das funktioniert:
%Vor%Wenn Sie eine Nur-Text-Datei zu einem Dienst hochladen, der diesen Code enthält, hustet sie den Originaltext zurück. Ich habe es mit einem Ajax-Upload zusammen laufen lassen; Es sollte auch mit einem altmodischen Datei-Upload-Formular funktionieren.
Es scheint mir, dass es einen einfacheren Weg dafür geben muss, besonders die tiefe Verschachtelung des Inhalts ist ziemlich klobig. Lassen Sie es mich wissen, wenn Sie eine Vereinfachung finden.
AKTUALISIEREN (thx akauppi):
%Vor%Ich habe den folgenden Code verwendet. War nicht zu schwer, aber es hätte irgendwo irgendwo eine Sprühprobe geben müssen.
multipart/form-data
Formulare müssen immer verwendet werden (anstelle des traditionellen application/x-www-form-urlencoded
), wenn binäre Uploads beteiligt sind. Mehr Details hier .
Meine Anforderungen waren:
Einige Fragen:
Es liegt im Wesen des REST-API-Designs, den Client als einen "Menschen" zu behandeln (im Debuggen sind wir es), der aussagekräftige Fehlermeldungen liefert, falls etwas mit der Nachricht nicht stimmt.
%Vor%Ok, nachdem ich versucht habe, einen Spray Unmarshaller für mehrteilige Formulardaten zu schreiben, entschied ich mich, einfach ein scala HttpServlet zu schreiben, das die Formularübergabe erhalten würde, und Apaches verwendet FileUpload Bibliothek zur Bearbeitung der Anfrage:
%Vor%Um die gepostete (möglicherweise binäre) Datei zu holen und sie vorübergehend irgendwo anzubringen, habe ich folgendes verwendet:
%Vor%Tags und Links scala file-upload post httprequest