从数据库获取图片地址转为base64传给前端

从数据库获取图片地址转为base64传给前端

  • 引入依赖
<!--io流读取文件-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.11.0</version>
        </dependency>
  • ServiecImpl.java
@SneakyThrows
@Override
public Boolean selectPic(){

    File file = new File("E:XXX.jpeg");

    byte[] fileByteArray = FileUtils.readFileToByteArray(file);

    BASE64Encoder encoder = new BASE64Encoder();
    String imageString = encoder.encode(fileByteArray);//转换成Base64形式,或者直接从数据库取出来
    System.out.println("imageString:"+imageString);
//    request.setAttribute("imageString", imageString);

//    return "/showImage";
    return true;
}
Java Spring Boot 中,将图片换为 Base64 编码可以通过以下步骤实现。这里提供两种常见场景的代码示例:**读取本地图片文件**和**处理上传的图片文件**。 --- ### **方法 1:读取本地图片文件并转为 Base64** ```java import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.Base64; public class ImageToBase64 { public static void main(String[] args) { String imagePath = "src/main/resources/static/images/test.jpg"; // 图片路径 try { // 1. 读取图片字节数组 byte[] imageBytes = Files.readAllBytes(Paths.get(imagePath)); // 2. 转为 Base64 String base64 = Base64.getEncoder().encodeToString(imageBytes); // 3. 添加 Data URI 前缀(可选,用于前端直接显示) String dataUri = "data:image/jpeg;base64," + base64; System.out.println("Base64 编码结果(前50字符): " + base64.substring(0, 50) + "..."); } catch (IOException e) { e.printStackTrace(); } } } ``` #### **关键点说明** 1. **`Files.readAllBytes()`** 读取图片文件为字节数组(`byte[]`)。 2. **`Base64.getEncoder().encodeToString()`** 将字节数组转为 Base64 字符串。 3. **Data URI 前缀** 格式为 `data:image/[类型];base64,`,例如 `data:image/jpeg;base64,`,前端可直接用 `<img src="...">` 显示。 --- ### **方法 2:处理 Spring Boot 上传的图片文件** 在 Controller 中接收 `MultipartFile` 并转为 Base64: ```java import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.util.Base64; import java.io.IOException; @RestController public class ImageUploadController { @PostMapping("/upload") public String uploadImage(@RequestParam("file") MultipartFile file) { try { // 1. 获取文件字节数组 byte[] bytes = file.getBytes(); // 2. 转为 Base64 String base64 = Base64.getEncoder().encodeToString(bytes); // 3. 返回带前缀的 Base64(或直接返回 base64) return "data:" + file.getContentType() + ";base64," + base64; } catch (IOException e) { return "图片处理失败: " + e.getMessage(); } } } ``` #### **关键点说明** 1. **`MultipartFile.getBytes()`** 直接获取上传文件的字节数组。 2. **`file.getContentType()`** 动态获取图片 MIME 类型(如 `image/png`),用于生成正确的 Data URI。 --- ### **完整 Spring Boot 示例** #### **1. 添加依赖** 确保 `pom.xml` 包含 Spring Web 和文件上传支持: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` #### **2. 配置文件上传限制(可选)** 在 `application.properties` 中调整上传大小限制: ```properties spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB ``` #### **3. 测试接口** 使用 Postman 或 curl 测试: ```bash curl -X POST -F "file=@/path/to/your/image.jpg" http://localhost:8080/upload ``` --- ### **常见问题扩展** 1. **如何处理大图片?** - 使用缓冲流(`BufferedInputStream`)分块读取,避免内存溢出。 2. **Base64 字符串如何保存到数据库?** - 定义为 `TEXT` 或 `LONGTEXT` 类型字段(MySQL 中 `TEXT` 最大支持 64KB,`LONGTEXT` 支持 4GB)。 3. **如何从 Base64 还原图片?** ```java byte[] decodedBytes = Base64.getDecoder().decode(base64String); Files.write(Paths.get("output.jpg"), decodedBytes); ``` 4. **前端如何显示 Base64 图片?** ```html <img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABA..." alt="Base64 Image"> ``` 5. **Base64 编码后字符串变长如何优化?** - 对大文件建议直接传输文件而非 Base64Base64 会增加约 33% 体积)。 --- ### **性能优化建议** - **异步处理**:大文件换使用 `@Async` 避免阻塞主线程。 - **缓存结果**:频繁访问的图片 Base64 结果可缓存到 Redis。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值