如何使用休息模板下载图像?

2022-09-03 17:41:31

我有以下代码:

restTemplate.getForObject("http://img.championat.com/news/big/l/c/ujejn-runi_1439911080563855663.jpg", File.class);

我特别拍摄了不需要授权的图像,绝对适用于所有人。

当以下代码执行时,我看到以下堆栈跟踪:

org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [class java.io.File] and content type [image/jpeg]
    at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:108)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:559)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:512)
    at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:243)
    at com.terminal.controller.CreateCompanyController.handleFileUpload(CreateCompanyController.java:615)

我错了什么?


答案 1

Image 是一个字节数组,因此您需要使用 object 作为以下各项的第二个参数:byte[].classRestTemplate.getForObject

String url = "http://img.championat.com/news/big/l/c/ujejn-runi_1439911080563855663.jpg";
byte[] imageBytes = restTemplate.getForObject(url, byte[].class);
Files.write(Paths.get("image.jpg"), imageBytes);

要使其正常工作,您需要在应用程序配置中配置:ByteArrayHttpMessageConverter

@Bean
public RestTemplate restTemplate(List<HttpMessageConverter<?>> messageConverters) {
    return new RestTemplate(messageConverters);
}

@Bean
public ByteArrayHttpMessageConverter byteArrayHttpMessageConverter() {
    return new ByteArrayHttpMessageConverter();
}

我已经在Spring Boot项目中对此进行了测试,并且图像按预期保存到文件中。


答案 2

如果您只需要从URL中获取图像,Java附带了javax.imageio.ImageIO类,其中包含以下方法签名:

   public static BufferedImage read(URL var0) throws IOException;

使用示例:

    try {
      BufferedImage image = ImageIO.read(new URL("http://www.foo.com/icon.png"));
      int height = image.getHeight();
      int width = image.getWidth();
    } catch (IOException e) {}

推荐