Hi,
I've been using spring for android successfully in my android app to get/post data from/to the server. Now, I have to do a post request for a multipart form, but I've been unable to get it working the way I want.
Use case:
1. Pick a photo from the gallery
2. Load it to a bitmap using the file source
3. Compress the bitmap to a ByteArrayOutputStream
4. Pass the byte array ( ByteArrayOutputStream.toByteArray() ) to the server. (I need to send this as jpeg not application/octet-stream)
The server endpoint for upload photo accepts a MultipartFile with only the following Mime types ( Note, it does not accept MimeType: application/octet-stream ):
GIF("image/gif")
PNG("image/png", "image/x-png")
JPG("image/jpeg", "image/jpg", "image/pjpeg")
BMP("image/bmp")
I've tried using the sample code, but been unsuccessful so far.
With the following code I get the following error:
org.springframework.web.bind.MissingServletRequest ParameterException: Required MultipartFile parameter 'file' is not present
Help on this matter is greatly appreciated. Thanks and keep up the good work.
Here's my code:
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());


Reply With Quote
