Faire un multipart requête post avec jpeg compressé tableau d'octets avec le printemps pour android
J'ai été en utilisant le printemps pour android avec succès dans mon application android pour publier des données depuis/vers le serveur. Maintenant, je dois faire une requête post pour un formulaire multipart, mais j'ai été incapable de le faire fonctionner comme je le souhaite.
Cas d'utilisation:
1. Choisissez une photo dans la galerie
2. Charger une image bitmap en utilisant le fichier source
3. Compresser l'image une ByteArrayOutputStream
4. Passer le tableau d'octets ( ByteArrayOutputStream.toByteArray() ) pour le serveur. (J'ai besoin d'envoyer en jpeg pas d'application/octet-stream)
Le point d'arrêt du serveur pour télécharger une photo accepte un MultipartFile avec seulement les types Mime suivants ( Remarque, il n'accepte pas de type mime: application/octet-stream ):
GIF("image/gif")
PNG("image/png", "image/x-png")
JPG("image/jpeg", "image/jpg", "image/pjpeg")
BMP("image/bmp")
J'ai essayé d'utiliser le exemple de code, mais échoué jusqu'à présent.
Avec le code suivant, j'obtiens l'erreur suivante:
org.springframework.web.bind.MissingServletRequest ParameterException: MultipartFile paramètre "file" (fichier n'est pas présent
Aide est grandement appréciée. Merci et continuez le bon travail.
Voici mon code:
bitmap = BitmapFactory.decodeFile("/mnt/sdcard/DCIM/Camera/20130205_162546.jpg");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.JPEG, 60, bos);
byte[] data = bos.toByteArray();
//populate the data to post
MultiValueMap<String, Object> formData = new LinkedMultiValueMap<String, Object>();
formData.add("caption", "Test Caption");
formData.add("file", data);
//The URL for making the POST request
final String url = "http://api.example.com/imageUpload?oauth_token=XXXXXX";
HttpHeaders requestHeaders = new HttpHeaders();
//Sending multipart/form-data
requestHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
//Populate the MultiValueMap being serialized and headers in an HttpEntity object to use for the request
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(formData, requestHeaders);
//Create a new RestTemplate instance
RestTemplate restTemplate = new RestTemplate(true);
// //Set a custom message converter that supports the application/json media type
// final GsonHttpMessageConverter gsonMessageConverter = new GsonHttpMessageConverter();
// gsonMessageConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
// final ByteArrayHttpMessageConverter byteArrayMessageConverter = new ByteArrayHttpMessageConverter();
// byteArrayMessageConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.IMAGE_JPEG));
// final FormHttpMessageConverter formMessageConverter = new FormHttpMessageConverter();
// formMessageConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.IMAGE_JPEG));
// restTemplate.getMessageConverters().addAll(Arrays.asList(gsonMessageConverter, byteArrayMessageConverter, formMessageConverter));
//Make the network request, posting the message, expecting a String in response from the server
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);
//Return the response body to display to the user
Log.i(TAG, "**** response.body : " + response.getBody());
OriginalL'auteur Nalin Mello | 2013-02-06
Vous devez vous connecter pour publier un commentaire.
Je suis tombé sur le même genre de problème et la solution était de remplacer le
org.springframework.core.io.Resource#getFileName()
mise en œuvre.Dans mon cas:
Où imageFilename est le nom de fichier. Qui sera plus tard repris comme multipart en-tête:
Content-Disposition: form-data; name="your_image_form_item"; filename="20130520_142401.jpg"
J'espère que cela aide!
OriginalL'auteur gunar
J'ai trop souffert de ce problème. S'est avéré que le corps de ma question était sur le serveur, le serveur n'a pas été configuré pour gérer et résoudre multipart demande.
Découvrez ma réponse détaillée ici. Espérons que cela aide.
OriginalL'auteur TrueCoke