2014-01-13 2 views
2

Мне нужно создать запрос RestTemplate, который отправит изображение для загрузки через приложение PHP.RestTemplate загрузить файл изображения

Мой код:

Resource resource = new FileSystemResource("/Users/user/Documents/MG_0599.jpg"); 
MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>(); 
    parts.add("Content-Type", "image/jpeg"); 
    parts.add("file", resource); 
    parts.add("id_product", productId); 

ResponseEntity<String> response = cookieRestTemplate.getForEntity(url, String.class, parts); 

После запуска этого приложения, PHP сервер отправить мне информацию, что файл пуст.

Я думал, что проблема связана с PHP-сайтом, но я установил плагин POSTER для Firefox, и я сделал запрос GET на этот же URL-адрес, но файл для загрузки, я выбрал нормальный, как в веб-форме (всплывающее окно системы для выбора файла). После этого программа PHP загрузила файл без каких-либо проблем.

Я думаю, что проблема, может быть с этим, что я шлю ресурс как значение имени: пары

parts.add("file", resource); 

А на плакат плагине, я просто выбрать файл из папки файловой системы?

Вы можете мне помочь?

+0

Я обновил описание – Ilkar

+0

Хорошо, но везде я нашел информацию, что я должен загрузить файл, как это. У вас есть другое решение? Я могу добавить что-то в заголовок, но что? – Ilkar

ответ

8

Вы не используете RestTemplate правильно. Вы используете следующий метод

public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Map<String, ?> urlVariables) 

Итак, вы видите ваш MultiValueMap будет использоваться в качестве источника для URL-адресов переменных, которые вы на самом деле не кажется, есть. В запросе нет параметров запроса.

Фактически вы не сможете загрузить файл с помощью любого из методов getForX.

Вам нужно будет использовать один из методов exchange. Например

Resource resource = new FileSystemResource(
      "/Users/user/Documents/MG_0599.jpg"); 
MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>(); 
parts.add("Content-Type", "image/jpeg"); 
parts.add("file", resource); 
parts.add("id_product", productId); 

restTemplate.exchange(url, HttpMethod.GET, 
      new HttpEntity<MultiValueMap<String, Object>>(parts), 
      String.class); // make sure to use the generic type argument 

Обратите внимание, что это очень редко, чтобы сделать загрузку файлов с GET запроса.

+0

Я тестировал вашу версию запроса, но запрос на обмен не переходит к контроллеру PHP. Я не знаю почему, но я получаю 500 ошибок. GetForEntity работает нормально, но не отправляет изображение:/ – Ilkar

+0

@llkar 500 - ошибка на стороне сервера. Может быть, ему трудно получить файл. У вас максимальный размер загрузки файлов? –

+0

Нет, это не ограничение по размеру, файл имеет 300 КБ. Вы знаете, как моделировать обменный запрос в инструменте POSTER для firefox? – Ilkar

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