计算机系统应用教程网站

网站首页 > 技术文章 正文

java后台把base64字符串向客户端输出图片

btikc 2024-10-16 08:17:38 技术文章 11 ℃ 0 评论

首先idea建立一个demo工程, 写一个controller模拟base64输出图片


目录结构

主要代码:

pom.xml 因为使用了hutool工具读取txt文件,所以dependency引入hutool-all, 实际应用按需引入(不过hutool是我所有项目必用工具包[呲牙])

<dependency>
        <groupId>cn.hutool</groupId>
        <artifactId>hutool-all</artifactId>
        <version>5.5.8</version>
</dependency>

base64.txt , 存放测试用的base64字符串, 实际应用存在数据库中, 从数据库中获取.

PicController.java 代码

package com.example.demo.controller;

import cn.hutool.core.io.file.FileReader;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import sun.misc.BASE64Decoder;
import javax.servlet.http.HttpServletResponse;
import java.io.*;

@Controller
public class PicController {

    @RequestMapping("/getPic")
    public void getPic(HttpServletResponse response) throws IOException {
        FileReader fileReader = new FileReader("base64.txt");
        String base64 = fileReader.readString().replace("data:image/jpeg;base64,","");
        // 以上获取base64方式改为自己的逻辑代码, 记得 .replace("data:image/jpeg;base64,",""), 否则解析成图片失败
        BASE64Decoder decoder = new BASE64Decoder();
        byte[] bytes = decoder.decodeBuffer(base64);
        for (int i = 0; i < bytes.length; ++i) {
            if (bytes[i] < 0) {// 调整异常数据
                bytes[i] += 256;
            }
        }
        //输出图片
        response.setContentType("image/jpeg");
        response.setDateHeader("expries", -1);
        response.setHeader("Cache-Control", "no-cache");
        response.setHeader("Pragma", "no-cache");
        OutputStream out = response.getOutputStream();
        out.write(bytes);
        out.flush();
        out.close();
    }

}

启动项目, 然后浏览器地址输入

http://localhost:8080/getPic 即可看到图片

因为前端开发中, 很多时候和第三方对接的详情接口给过来的是上传文件id, 不会直接给图片url的(接口有url当然最舒服[呲牙])

<img src="http://localhost:8080/getPic?id=上传图片数据库保存的id">  
 这样前端页面就可以直接看到图片了

第一次写文章, 主要想把项目中遇到的问题记录下来, 大家分享.

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表