title: Spring : File Upload RESTFUL Web Service
body: <p>I am creating POC for RESTFUL Web service using Spring 4.0.
  It is working fine if we pass only String or any other basic dataype. </p>
  
  <pre><code>@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);  
  
      //----------------------------------------
  }
  </code></pre>
  
  <p>This works fine.
  but If I want to pass byte stream or File Object to function, How can i write this function having these parameters? and How can I write Client having provision of passing byte stream?</p>
  
  <pre><code>@RequestMapping(value="/upload/file", method=RequestMapping.post)
  public String uploadFile(@RequestParam("file", required=false) byte [] fileName){
       //---------------------
       // 
  }
  </code></pre>
  
  <p>I tried this code but getting 415 Error.</p>
  
  <pre><code>@RequestMapping(value = "/upload/file", method = RequestMethod.POST, consumes="multipart/form-data")
  public @ResponseBody String uploadFileContentFromBytes(@RequestBody MultipartFormDataInput input,  Model model) {
      logger.info("Get Content. "); 
    //------------
     }  
  </code></pre>
  
  <p>Client Code - Using apache HttpClient</p>
  
  <pre><code>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();
      }
  </code></pre>