Android Volley de la Bibliothèque: Comment envoyer une image sur le serveur?
Hy gars!
J'ai un jpg image stored on my device
et je veux sent it to server
(mywebsite.com/api.php). Je voudrais utiliser volley library
parce qu'il est fait par les développeurs android de google et je pense qu'ils vont l'ajouter à la sdk dès que possible.
Droit maintenant, je suis en utilisant le code suivant pour envoyer des Chaînes sur le serveur:
postRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
//code here for response
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//code here for error response
}
}
) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<>();
//the POST parameters:
params.put("key", "myApiKey");
params.put("data","stringOfMyData");
return params;
}
};
Comment pourrais-je envoyer le jpg à un serveur de volley de la bibliothèque? Chaque fois que j'envoie quelque chose que je dois l'envoyer avec la clé API afin de recevoir des informations au serveur, donc je ne peux pas changer Map<String, String>
à Map<String, File>
parce que ma clé API est une chaîne de caractères.
Que j'ai lu, il y a une solution pour changer mon image à un byte[] array
et puis le convertir en un base64 string
format, mais je voudrais éviter si possible.
Est-il une autre solution pour envoyer l'image sans avoir à les convertir à un base64 string
?
Toute référence ou conseils sont les bienvenus! Merci à l'avance!
OriginalL'auteur Chris Rock | 2015-07-29
Vous devez vous connecter pour publier un commentaire.
Les fichiers sont envoyés à l'aide de
multipart
soutien dansPOST
demande. C'est la même que dans les formulaires HTML comme ici.Volley
n'a pas multipart de support par défaut, mais il est flexible de sorte que vous pouvez étendre sonRequest
classe pour mettre en œuvre votre propre version demultipart
.Vous pouvez en trouver un de la mise en œuvre de
MultipartRequest
classe à partir de ce gist et simplement utiliser dans votre programmehttps://gist.github.com/ishitcno1/11394069
Vous pouvez consommer cette classe à quelque chose comme ceci:
new MultipartRequest(url, params, image_path,...
ne pas correspondre à la MultipartRequest constructeurs paramenters. Parce que des que je reçois l'erreur suivante et solution possible: Impossible de Résoudre le Constructeur...Changement de signature de MultipartRequestJe pense que le bon ordre des paramètres est:
multipartRequest = new MultipartRequest(url, imagePath, params, ...)
parce que les paramètres du constructeur de la commande estpublic MultipartRequest(String url, String filePath, String routeId,...)
mais je ne sais pas ce que routeId est et comment pourrais-je ajouter une table de hachage(HashMap<String,String>
n'est pas la même chose queString
)Vous pouvez prendre un coup d'oeil à ma réponse ici. Deux options: avec ou sans HttpEntity 🙂
Qu'est-ce que MRouteId? Et j'obtiens l'erreur: "java.lang.NoClassDefFoundError: org.apache.http.de l'entité.ContentType au org.apache.http.de l'entité.le mime.contenu.FileBody.<init>(FileBody.java:89)"
OriginalL'auteur Sharj