Java + Spring Boot:下载图像并将其传递给请求

问题描述 投票:2回答:2

我有一个Spring Boot应用程序,应该像代理一样。

它应该处理像“http://imageservice/picture/123456”这样的请求

然后应用程序应该生成一个新的“http://internal-picture-db/123456.jpg”请求,它应该下载它背后的图片(123456.jpg),然后将其传递给响应并提供服务。

它应该像......

@RequestMapping("/picture/{id}")
public String getArticleImage(@PathVariable String id, HttpServletResponse response) {

    logger.info("Requested picture >> " + id + " <<");

    // 1. download img from http://internal-picture-db/id.jpg ... 

    // 2. send img to response... ?!

    response.???

}

我希望我的意思很清楚......

所以我的问题是:最好的方法是什么?

仅仅为了获取信息,不可能只发送重定向,因为系统在互联网上不可用。

java image servlets download spring-boot
2个回答
5
投票

我会使用响应主体来返回图像而不是视图,例如:

@RequestMapping("/picture/{id}")
@ResponseBody
public HttpEntity<byte[]> getArticleImage(@PathVariable String id) {

    logger.info("Requested picture >> " + id + " <<");

    // 1. download img from http://internal-picture-db/id.jpg ... 
    byte[] image = ...

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.IMAGE_JPEG);
    headers.setContentLength(image.length);

    return new HttpEntity<byte[]>(image, headers);
}

你有一个帖子可以帮助你从其他网址下载图像:how to download image from any web page in java


0
投票
@RequestMapping("/picture/{id}")
public ResponseEntity<byte[]> getArticleImage(@PathVariable String id) {

    logger.info("Requested picture >> " + id + " <<");

    // 1. download img from http://internal-picture-db/id.jpg ... 
    byte[] image = ...

    return new ResponseEntity<byte[]>(image, HttpStatus.OK);
}

并在此post中查看下载图像的代码。

© www.soinside.com 2019 - 2024. All rights reserved.