2016-06-13 5 views
1

Я пытаюсь отправить изображение на веб-службу REST, но получаю сообщение об ошибке. Я пробовал много разных способов (сохранить массив байтов, отправить другой тип файла, ...), но не нашел хорошего пути.Ошибка при отправке multipartfile в REST api

код Spring обслуживания (вызов API с параметрами):

public void uploadImage(String id, MultipartFile file) { 
    RestTemplate rt = new RestTemplate(); 
    LinkedMultiValueMap<String, Object> map = new LinkedMultiValueMap<>(); 
    map.add("filename", "tt"); 
    map.add("extension", "png"); 
    map.add("file", file); 
    HttpHeaders headers = new HttpHeaders(); 
    headers.setContentType(MediaType.MULTIPART_FORM_DATA); 

    HttpEntity<LinkedMultiValueMap<String, Object>> requestEntity = new HttpEntity<LinkedMultiValueMap<String, Object>>(
      map, headers); 
    ResponseEntity<String> result = rt.exchange(WebConstant.API_URL + "melt/" + id + "/image", HttpMethod.POST, requestEntity, String.class); 
} 

код API:

@RequestMapping(value="/{meltId}/image", method=RequestMethod.POST) 
public @ResponseBody String uploadMeltImage(@PathVariable String meltId, @RequestParam String filename, @RequestParam String extension, @RequestParam("file") MultipartFile file){ 
    System.out.println("check 1"); 
    Melt knownMelt = meltRepo.findOne(meltId); 
    if (file != null && knownMelt != null && extension != null && filename != null) { 
     try { 
      String url = filename + "." + extension; 
      InputStream is = file.getInputStream(); 

      // Prepare buffered image. 
      BufferedImage img = ImageIO.read(is); 

      // Create a byte array output stream. 
      ByteArrayOutputStream bao = new ByteArrayOutputStream(); 

      // Write to output stream 
      ImageIO.write(img, extension, bao); 

      if (knownMelt.getImageUrl() != url){ 
       knownMelt.setImageUrl(url); 
       meltRepo.save(knownMelt); 
      } 
      return "You successfully uploaded for melt" + meltId + "!"; 

     } catch (Exception e) { 
      return "You failed to upload for melt" + meltId + " => " + e.getMessage(); 
     } 
    } else { 
     return "You failed to upload for melt" + meltId + " because the file was empty."; 
    } 
} 

Кто-нибудь есть решение отправить свой файл в мой API, а затем быть в состоянии сохранить Это ?

ответ

0

Вместо обработки файлов с помощью MultiPartFile вы можете преобразовать файл в строку Base64 и сохранить с помощью аннотации с помощью @Lob. Вы можете использовать объект FileReader для чтения файла при отправке его в веб-службу REST.

+0

Ohhhh thanks man !! вы спасли мой день;) –

+0

Добро пожаловать! В любое время мужчина.Хорошо, чтобы помочь вам. !! – Deepanjan

Смежные вопросы