【问题标题】:How Upload image to Server() via RestTemplate Client and Server如何通过 RestTemplate 客户端和服务器将图像上传到服务器()
【发布时间】:2016-02-15 12:32:22
【问题描述】:

我正在使用 RestTemplate 客户端代码并希望在服务器端访问图像。我想在 Tomcat 的自定义目录上上传图片,但出现错误:

Caused by: org.springframework.web.client.RestClientException: Could not write request: no suitable HttpMessageConverter found for request type [org.apache.http.entity.mime.MultipartEntity] and content type [multipart/form-data]

RestTemplate 客户端代码:

public String saveCompanylogo(File file){
        String url = COMPANY_URL+ "/saveCompanyLogo";
        MultipartEntity multiPartEntity = new MultipartEntity ();
        FileBody fileBody = new FileBody(file) ;
        //Prepare payload
        multiPartEntity.addPart("file", fileBody) ;
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.MULTIPART_FORM_DATA);
        HttpEntity<MultipartEntity> entity = new HttpEntity<MultipartEntity>    (multiPartEntity, headers);
        ResponseEntity<String> exchange = restTemplate.exchange(url,     HttpMethod.POST, entity,  new ParameterizedTypeReference<String>() {
        });
        return exchange.getBody();
    }

我的服务器端(控制器)代码是:

@RequestMapping(method = POST, value = "/saveCompanyLogo")
    @Consumes("multipart/form-data")
    public String saveCompanylogo(@RequestParam("file") MultipartFile file)         {
      System.out.println(""+file);   
     //Todo coding
     return "stringData";
    }

【问题讨论】:

  • 我使用FileSystemResource 而不是FileBody。服务器收到InputStream
  • 这对我来说不起作用。你能附上你的代码吗?

标签: java spring-mvc resttemplate


【解决方案1】:

我使用FileSystemResource 而不是FileBody。这是我的代码:

restTemplate.getMessageConverters().add(new ByteArrayHttpMessageConverter());

Map params = new LinkedMultiValueMap();
params.put("file", new FileSystemResource(file));
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity requestEntity = new HttpEntity<>(params, httpHeaders);
restTemplate.exchange(url, HttpMethod.POST, requestEntity, String.class);

在服务器端(我使用 Jersey 而不是 MVC,但我想没关系):

@RequestMapping(method = POST, value = "/saveCompanyLogo")
@Consumes("multipart/form-data")
public String saveCompanylogo(@RequestParam("file") InputStream file) {
    //DO SOMETHING
}

希望对你有帮助

【讨论】:

  • 我如何设置 HttpEntity ,这怎么可能,因为我们在“new HttpEntity(params, httpHeaders);”中传递 LinkedMultiValueMap 参数当我使用“HttpEntity”时,收到警报:“FormParams 无法解析为类型”但如果我使用:HttpEntity requestEntity = new HttpEntity(params, headers);运行时出错:原因:java.lang.IllegalStateException:无法处理部件,因为没有提供多部件配置
  • 对不起,我的错。删除FormParams
  • 我尝试了其他几个答案,但没有一个对我有帮助,我不得不使用“FileSystemResource”并将转换后的文件传递到那里(使用我拥有的将 MultiPartFile 转换为文件的方法)
  • java.lang.ClassCastException: class org.springframework.core.io.FileSystemResource cannot be cast to class java.util.Listparams.put("file", new FileSystemResource(file));
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多