Java通过Http获取图像并输出流
## 简介 遇到一个需求,需要开发一个接口:该接口底层调用另一个接口,获取文件流(图片),并将其文件
渲染中...
## 简介
遇到一个需求,需要开发一个接口:该接口底层调用另一个接口,获取文件流(图片),并将其文件流再次返回(`其实就是套一层接口,起到转发的效果`)。
> 只提供简单思路,具体情况请自行分析编写代码。
<!-- more -->
## 原接口
原接口通过response的输出流将图片返回,主要代码如下:
```java
// 主要依赖包
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
public void test(HttpServletResponse response){
//获取图片
BufferedImage image = server.gerImage();
ServletOutputStream out = response.getOutputStream();
ImageIO.write(image, "jpg", out);
}
```
以上只贴出获取到文件对象`BufferedImage`之后的操作,具体如何获取`BufferedImage`请根据情况自行处理。
获取到`BufferedImage`对象后,即通过`response.getOutputStream()`获取到响应的输出流`ServletOutputStream`,随后通过`ImageIO.write(image, "jpg", out)`工具将图片对象写入输出流。
## 新接口
目前思路:新接口内通过Httpclient调用原接口,将文件流读取为BufferedImage,再次转换为输出流,主要代码如下:
- 第一部:调用方法
```java
public BufferedImage doget(){
CloseableHttpClient httpclient = HttpClients.createDefault();
// 执行请求
CloseableHttpResponse response = httpclient.execute(httpGet);
// 判断返回状态是否为200
//if (response.getStatusLine().getStatusCode() == 200) {
InputStream inputStream = response.getEntity().getContent();
BufferedImage image = ImageIO.read(inputStream);
return image;
//}
}
```
该部分代码主要通过`response.getEntity().getContent()`获取到接口响应的输入流,通过`ImageIO.read(inputStream)`工具获取到想要的`BufferedImage`对象。
通过这一步的代码获取到了原代码中使用的`BufferedImage`对象,之后就是参考源代码将其写到输出流。
- 第二部:复用原接口逻辑
```java
public void newTest(HttpServletResponse response){
//获取图片(调用上面封装好的doget方法)
BufferedImage image = server.doget();
ServletOutputStream out = response.getOutputStream();
ImageIO.write(image, "jpg", out);
}
```
END
评论
登录后查看和发表评论
前往登录