jax from example calling java web-services rest spring-mvc

java - from - Spring: Servicio web RESTFUL de carga de archivos



jax rs 2.0 client (2)

Estoy creando POC para el servicio web RESTFUL usando Spring 4.0. Funciona bien si pasamos solo String o cualquier otro tipo de datos básico.

@RequestMapping(value="/upload/file", method=RequestMapping.post) public String uploadFile(@RequestParam("fileName", required=false) String fileName){ logger.info("initialization of object"); //---------------------------------------- System.out.Println("name of File : " + fileName); //---------------------------------------- }

Esto funciona bien pero si quiero pasar una secuencia de bytes o un objeto de archivo a la función, ¿cómo puedo escribir esta función con estos parámetros? y ¿Cómo puedo escribir un Cliente que tenga la provisión de una secuencia de bytes pasante?

@RequestMapping(value="/upload/file", method=RequestMapping.post) public String uploadFile(@RequestParam("file", required=false) byte [] fileName){ //--------------------- // }

Intenté este código pero recibo un error 415.

@RequestMapping(value = "/upload/file", method = RequestMethod.POST, consumes="multipart/form-data") public @ResponseBody String uploadFileContentFromBytes(@RequestBody MultipartFormDataInput input, Model model) { logger.info("Get Content. "); //------------ }

Código de cliente: uso de apache HttpClient

private static void executeClient() { HttpClient client = new DefaultHttpClient(); HttpPost postReqeust = new HttpPost(SERVER_URI + "/file"); try{ // Set Various Attributes MultipartEntity multipartEntity = new MultipartEntity(); multipartEntity.addPart("fileType" , new StringBody("DOCX")); FileBody fileBody = new FileBody(new File("D://demo.docx"), "application/octect-stream"); // prepare payload multipartEntity.addPart("attachment", fileBody); //Set to request body postReqeust.setEntity(multipartEntity); HttpResponse response = client.execute(postReqeust) ; //Verify response if any if (response != null) { System.out.println(response.getStatusLine().getStatusCode()); } } catch(Exception ex){ ex.printStackTrace(); }


Puede crear su servicio de descanso como a continuación.

@RequestMapping(value="/upload", method=RequestMethod.POST) public @ResponseBody String handleFileUpload( @RequestParam("file") MultipartFile file){ String name = "test11"; if (!file.isEmpty()) { try { byte[] bytes = file.getBytes(); BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(new File(name + "-uploaded"))); stream.write(bytes); stream.close(); return "You successfully uploaded " + name + " into " + name + "-uploaded !"; } catch (Exception e) { return "You failed to upload " + name + " => " + e.getMessage(); } } else { return "You failed to upload " + name + " because the file was empty."; } }

Y para el lado del cliente, haga lo siguiente.

import java.io.File; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpVersion; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.ContentBody; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.CoreProtocolPNames; import org.apache.http.util.EntityUtils; public class Test { public static void main(String[] args) throws Exception { HttpClient httpclient = new DefaultHttpClient(); httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); HttpPost httppost = new HttpPost("http://localhost:8080/upload"); File file = new File("C://Users//Kamal//Desktop//PDFServlet1.pdf"); MultipartEntity mpEntity = new MultipartEntity(); ContentBody cbFile = new FileBody(file, "multipart/form-data"); mpEntity.addPart("file", cbFile); httppost.setEntity(mpEntity); System.out.println("executing request " + httppost.getRequestLine()); HttpResponse response = httpclient.execute(httppost); HttpEntity resEntity = response.getEntity(); System.out.println(response.getStatusLine()); if (resEntity != null) { System.out.println(EntityUtils.toString(resEntity)); } if (resEntity != null) { resEntity.consumeContent(); } httpclient.getConnectionManager().shutdown(); } }


<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> </bean>

este código requerido