Dovrei implementare una forma relativamente complessa che segue, ma ha almeno altre quattro pagine che richiedono all'utente di inserire tutte le informazioni necessarie per le tracce:
Questi dati dovranno essere inviati al server, che viene implementato usando Dropwizard. Sto cercando le migliori pratiche su come caricare e inviare una forma così complessa con potenzialmente dozzine di canzoni al server.
La soluzione più semplice che ho visto è una semplice richiesta multipart / form-data con il seguente schema di modulo ( Fonte):
Client
<html>
<body>
<h1>File Upload with Jersey</h1>
<form action="rest/file/upload" method="post" enctype="multipart/form-data">
<p>
Select a file : <input type="file" name="file" size="45" />
</p>
<input type="submit" value="Upload It" />
</form>
</body>
</html>
Server
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadTrack(final FormDataMultiPart multiPart) {
List<FormDataBodyPart> artists = multiPart.getFields("artist");
StringBuffer output = new StringBuffer();
for (FormDataBodyPart artist : artists)
output.append(artist.getValueAs(String.class));
List<FormDataBodyPart> tracks = multiPart.getFields("track");
for (FormDataBodyPart track : tracks)
writeToFile(track.getValueAs(InputStream.class), "Foo");
return Response.status(200).entity(output.toString()).build();
}
Poi ho anche letto dei caricamenti di file tramite Ajax o Formdata ( Mozilla HttpRequest ) che consente di pubblicare i messaggi nei formati application / x-www-form-urlencoded , multipart / form-data , o text / plain . Non so quale approccio, se esiste, è il migliore.
Una soluzione ideale sarebbe utilizzare Jackson per convertire una stringa json nei miei oggetti dati, ma non ho l'impressione che ciò sia possibile con i dati binari.