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