遇到一个需求,需要开发一个接口:该接口底层调用另一个接口,获取文件流(图片),并将其文件流再次返回(其实就是套一层接口,起到转发的效果)。
只提供简单思路,具体情况请自行分析编写代码。
原接口通过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 许可协议。转载请注明出处!