2013-08-14 9 views
15

Ich habe einen Server und ich muss Dateien zusammen mit einigen Feldern vom Client auf den Server hochladen. Ich verwende derzeit Standard-Multipart/Form-Daten.Ist multipart/form-data besser als JSON + Base64?

Ich habe jedoch festgestellt, dass die Verwendung von Multipart/Form-Daten nicht ideal ist. Objekte auf meinem Server können andere Objekte enthalten, die in ihnen verschachtelt sind, und sie werden daher als ein JSON-Objekt mit anderen eingebetteten JSON-Objekten dargestellt.

Ich möchte für den Client starten POST/PUT-Anfragen mit einer JSON-Darstellung genau wie es in einer GET-Anfrage an den Server, in einer REST-ful-Weise erwarten würde. Auf diese Weise muss ich die Felder nicht glätten, die möglicherweise mehrere Ebenen innerhalb des JSON-Objekts verschachtelt haben, um mehrteilige/Formulardaten zu verwenden.

Problem ist, JSON stellt keine binären Daten. Multipart/Formulardaten scheinen keine Möglichkeit zu haben, Felder darzustellen, die in den Werten anderer Felder verschachtelt sind. Aber es hat eine viel bessere Handhabung von Datei-Uploads.

Ich bin ratlos, wie das zu gestalten ist. Soll ich nur den Client JSON mit den in base64 codierten Feldern hochladen lassen und den 25% Treffer machen? Oder soll ich das JSON-Objekt als eine Art "json" -Variable in einer Multipart/form-data-Anfrage darstellen lassen und die Binärdateien als weitere Variable hochladen?

Antwort

6

Soll ich nur den Client JSON mit den in base64 codierten Feldern hochladen und den 25% Treffer machen?

Der Treffer beträgt 33% seit 4/3 = 1,33.

Oder soll ich das JSON-Objekt haben wird als eine Art „json“ Variable in einer multipart/form-data Anfrage dargestellt und haben die binären Dateien als eine andere Variable hochgeladen werden?

Dies sollte funktionieren.

Sie könnten auch diesen Ansatz in Betracht ziehen: Senden Sie alle Dateien mit multipart, dann erhalten Sie einige Identifikatoren von Dateien als Antwort. Setzen Sie diese Identifikatoren in Ihr json und senden Sie es, wie Sie möchten. Dieser Ansatz kann nützlich sein, wenn Sie viele Szenarien haben, in denen Sie Dateien senden: Sie können sie immer mit derselben Anfrage an den Server senden und dann ihre Identifikatoren erhalten; Danach mach mit ihnen was du magst.

+0

Der letzte Ansatz, der separate Aufrufe befürwortet (eine für das Multipart-Bild und eine andere für die JSON-Daten), ist interessant. Das einzige Problem sind 2 API-Aufrufe anstelle von einem. Dieser Trade-Off ist natürlich App-spezifisch. –