Upload de fichier avec okhttp
Im à la finition de ce projet qui est à l'aide de okhttp pour la communication avec un webservice.
Tout va bien régulier Obtient et des Postes, mais je suis pas capable de télécharger un fichier.
La okhttp docs sont que très peu sur ces sujets, et tout ce que j'ai trouvé ici ou ailleurs ne semble pas fonctionner dans mon cas.
C'est censé être simple: je dois envoyer le fichier, et des valeurs de chaîne. Mais je ne peux pas compris comment le faire.
En suivant les quelques échantillons que j'ai trouvé, j'ai d'abord essayé ceci:
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();
Il me donne un "400 bad request" erreur.
J'ai donc essayé de le okhttp recettes:
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();
Même résultat.
Ne sais pas quoi d'autre à essayer ou quoi regarder dans de débogage.
La requête est faite avec ce code:
//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();
Mais je ne suis sûr que le problème est de savoir comment Im bâtiment le corps de la requête.
Ce que je fais mal?
EDIT: "getFile()" ci-dessus renvoie un Fichier objet, par la manière. Le reste des paramètres sont toutes les chaînes et les services de renseignements.
OriginalL'auteur diogo.abdalla | 2015-05-20
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé réponse à ma propre question un peu après le post initial.
Mal le laisser ici, parce que ça peut être utile à d'autres, étant donné qu'il y est un peu okhttp télécharger des exemples autour de:
Il n'y a pas de raison d'utiliser "addPart" avec des "en-Têtes.de", etc, comme dans les recettes, addFormDataPart fait le tour.
Et pour le champ fichier lui-même, il prend 3 arguments: le nom, puis le fichier de corps. C'est tout.
J'ai connu le même problème...vous vous demandez pourquoi les Recettes ce qui suggère d'utiliser "addPart" avec des "en-Têtes.".
Ce que la fonction getFile() est en train de faire ? Est-il donné pour le chemin d'accès de l'image ?
Merci 🙂 de travail 🙂
Être conscient que la classe
MultipartBuilder
n'existe plus.OriginalL'auteur diogo.abdalla
Je viens de changer
addFormDataPart
au lieuaddPart
et Enfin résolu Mon Problème à l'Aide du code suivant:qu'est-ce que MultipartBuilder. shubhank dit que c'est la partie de okHttp mais quand je le prends dans mon projet, il n'est pas résolu et me donner l'erreur
OriginalL'auteur Pratik Butani AndroidDev
dans OKHTTP 3+ utiliser cette AsyncTask
SignupWithImageTask
OriginalL'auteur Arpit Patel