2015-01-31 2 views
2

У меня есть следующий код, который я использую для публикации файла в службе, и он отлично работает. Единственная проблема, с которой я столкнулся, заключается в том, что мне нужно написать временный файл, чтобы получить файл FileSystemResource для размещения объекта с помощью restTemplateSpring Rest - Проводка файлов

Есть ли в любом случае я могу адаптировать следующий код, чтобы мне не пришлось писать временный файл ?

public String postNewIcon2(Integer fileId, MultipartFile multiPartfile) { 
    LOG.info("Entered postNewIcon"); 

    Map<String, Object> params = getParamsWithAppKey(); 
    params.put("fileId", fileId); 

    String result = null; 
    File tempFile = null; 
    try { 

     String originalFileNameAndExtension = multiPartfile.getOriginalFilename(); 

     String tempFileName = "c:\\temp\\image"; 
     String tempFileExtensionPlusDot = ".png"; 

     tempFile = File.createTempFile(tempFileName, tempFileExtensionPlusDot); 
     multiPartfile.transferTo(tempFile); 
     FileSystemResource fileSystemResource = new FileSystemResource(tempFile); 

     // URL Parameters 
     MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>(); 
     parts.add("file", fileSystemResource); 

     // Post 
     result = restTemplate.postForObject(getFullURLAppKey(URL_POST_NEW_ICON), parts, String.class, params); 

    } catch (RestClientException restClientException) { 
     System.out.println(restClientException); 
    } catch (IOException ioException) { 
     System.out.println(ioException); 
    } finally { 
     if (tempFile != null) { 
      boolean deleteTempFileResult = tempFile.delete(); 
      LOG.info("deleteTempFileResult: {}", deleteTempFileResult); 
     } 
    } 
    return result; 
} 

Спасибо

+0

Я» m не уверен, что это сработает, но вы можете попытаться использовать 'ByteArrayResource' и опубликовать его вместо' FileSystemResource'. 'ByteArrayResource r = new ByteArrayResource (multiPartfile.getBytes())' –

+0

Спасибо Kresimir - это сработало с небольшой помощью по этой ссылке: http://stackoverflow.com/questions/4118670/sending-multipart-file-as- пост-параметры-с-resttemplate-запросов –

ответ

2

Ответа с помощью с Кресимирами Nesek и по этой ссылке Sending Multipart File as POST parameters with RestTemplate requests

Следующего код сделал трюк - нет необходимости для временного файла в настоящее время

MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>(); 
final String filename="somefile.txt"; 
map.add("name", filename); 
map.add("filename", filename); 
ByteArrayResource contentsAsResource = new ByteArrayResource(content.getBytes("UTF-8")){ 
      @Override 
      public String getFilename(){ 
       return filename; 
      } 
     }; 
map.add("file", contentsAsResource); 
String result = restTemplate.postForObject(urlForFacade, map, String.class);