遇到一个需求,需要开发一个接口:该接口底层调用另一个接口,获取文件流(图片),并将其文件流再次返回(其实就是套一层接口,起到转发的效果
)。
只提供简单思路,具体情况请自行分析编写代码。
原接口通过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,再次转换为输出流,主要代码如下:
javapublic 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
对象,之后就是参考源代码将其写到输出流。
javapublic void newTest(HttpServletResponse response){
//获取图片(调用上面封装好的doget方法)
BufferedImage image = server.doget();
ServletOutputStream out = response.getOutputStream();
ImageIO.write(image, "jpg", out);
}
本文作者:DingDangDog
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!