Im finendo questo progetto che utilizza okhttp per la comunicazione con un webservice.Caricamento file con okhttp
Tutto sta andando bene per regolari GET e POST, ma non riesco a caricare correttamente un file.
I documenti di okhttp sono molto carenti su questi argomenti e tutto ciò che ho trovato qui o altrove non sembra funzionare nel mio caso.
Si suppone che sia semplice: devo inviare sia il file che alcuni valori di stringa. Ma non riesco a capire come farlo.
Dopo i campioni che ho trovato, ho provato questo:
RequestBody requestBody = new MultipartBuilder().type(MultipartBuilder.FORM)
.addFormDataPart("group", getGroup())
.addFormDataPart("type", getType())
.addFormDataPart("entity", Integer.toString(getEntity()))
.addFormDataPart("reference", Integer.toString(getReference()))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"task_file\""), RequestBody.create(MediaType.parse("image/png"), getFile()))
.build();
Mi dà un errore "400 Bad Request".
Così ho provato questo dalle ricette okhttp:
RequestBody requestBody = new MultipartBuilder().type(MultipartBuilder.FORM)
.addPart(Headers.of("Content-Disposition", "form-data; name=\"group\""), RequestBody.create(null, getGroup()))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"type\""), RequestBody.create(null, getType()))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"entity\""), RequestBody.create(null, Integer.toString(getEntity())))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"reference\""), RequestBody.create(null, Integer.toString(getReference())))
.addPart(Headers.of("Content-Disposition", "form-data; name=\"task_file\""), RequestBody.create(MediaType.parse("image/png"), getFile()))
.build();
stesso risultato.
Non so che altro provare o che cosa cercare per eseguire il debug di questo.
La richiesta è fatto con questo codice:
// adds the required authentication token
Request request = new Request.Builder().url(getURL()).addHeader("X-Auth-Token", getUser().getToken().toString()).post(requestBody).build();
Response response = client.newCall(request).execute();
Ma Im abbastanza sicuro che il problema è come Im la costruzione del corpo della richiesta.
Cosa sto sbagliando?
MODIFICA: "getFile()" sopra restituisce l'oggetto File, a proposito. Il resto dei parametri sono tutte stringhe e int.
grazie diogo.abdalla mi ha svegliato per me .. –
Ho affrontato lo stesso problema ... chiedendomi perché le Ricette suggerissero di usare "addPart" con "Headers.of". – Jsm
Cosa sta facendo la funzione getFile()? È dato per il percorso dell'immagine? –