Wie kann ich eine Datei bearbeiten, die über ein HTML-Formular in Spray / Scala / Java hochgeladen wurde?

8

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:

%Vor%

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!

    
ampersandre 21.09.2011, 16:30
quelle

4 Antworten

9

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%     
iwein 16.09.2012, 19:25
quelle
4

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:

  • muss Binärdateien von einigermaßen großer Größe hochladen
  • wollte Metadaten als Felder haben (nicht eingebettet in die URL oder den Dateinamen des Uploads)

Einige Fragen:

  • ist die Art, wie ich Fehler "den besten" Weg verwalte?

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%     
akauppi 01.08.2014 09:11
quelle
2

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%     
ampersandre 22.09.2011 19:23
quelle
1

Um die gepostete (möglicherweise binäre) Datei zu holen und sie vorübergehend irgendwo anzubringen, habe ich folgendes verwendet:

%Vor%     
user2378682 13.10.2015 14:34
quelle