spring boot实现base64上传

一:依赖安装

复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

二:base64上传示例

复制代码
package com.example.demo.controller;

import org.springframework.web.bind.annotation.*;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Base64;
import java.util.UUID;

@RestController
@RequestMapping("/base64")
public class Base64Controller {

    private static final String UPLOAD_PATH = "upload/";

    //base64上传
    @PostMapping
    public String upload(@RequestBody Base64FileDTO dto)
    {

        String base64Str = dto.getBase64();

        if (base64Str == null || base64Str.isEmpty()) {
            return "base64不能为空";
        }

        // 去除base64前缀:data:image/png;base64,
        String[] parts = base64Str.split(",");
        String base64Content;
        if (parts.length > 1) {
            base64Content = parts[1];
        } else {
            base64Content = base64Str;
        }

        byte[] bytes;
        try {
            bytes = Base64.getDecoder().decode(base64Content);
        } catch (IllegalArgumentException e) {
            return "base64格式有误";
        }
        //定义保存文件名
        String suffix = "png";
        if (parts[0].contains("jpeg")) {
            suffix = "jpg";
        } else if (parts[0].contains("png")) {
            suffix = "png";
        } else if (parts[0].contains("gif")) {
            suffix = "gif";
        }
        String fileName = UUID.randomUUID() + "." + suffix;

        File dest = new File(UPLOAD_PATH, fileName).getAbsoluteFile();

        File dir = dest.getParentFile();
        if (!dir.exists() && !dir.mkdirs()) {
            return "上传失败:目录创建失败";
        }

        try (FileOutputStream fos = new FileOutputStream(dest)) {
            fos.write(bytes);
        } catch (IOException e) {
            e.printStackTrace();
            return "文件保存失败";
        }

        return "上传成功,文件名:" + fileName;
    }

    // DTO
    static class Base64FileDTO {
        private String base64;

        public String getBase64() {
            return base64;
        }
        public void setBase64(String base64) {
            this.base64 = base64;
        }
    }
}

三:调用base64上传示例

使用postman调用上传测试

POST:http://127.0.0.1:8080/base64

请求体 raw JSON:

复制代码
{
    "base64": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
}

四:配置远程访问资源

如果需要直接通过 url 访问上传图片,需要配置静态资源映射

复制代码
package com.example.demo.config;
 
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry)
    {
        // 访问路径 /upload/** 映射到本地 /upload/
        registry.addResourceHandler("upload/**")
                .addResourceLocations("file:upload/");
    }
}
相关推荐
程序猿乐锅4 分钟前
万字详解Single-flight(单飞模式)
java·开发语言·分布式·后端·学习·single-flight
Java后端的Ai之路16 分钟前
【AIAgent开发】-Agent工具封装成CLI(纯干货!!!)
java·javascript·人工智能·agent·cli
AntsData1 小时前
用 12K+ 条亚马逊评论信号,定位机械键盘下一版该改什么
java·大数据·计算机外设
code2cat1 小时前
【随笔】连续批处理:长短请求怎样在迭代之间补位
java·人工智能·后端·大语言模型·vllm
最强小杰1 小时前
DeepSeek V4 Flash + Codex CLI 接入教程:原生 Responses API 适配,从配置到跑通收藏这篇就够了(2026)
java·前端·python·ai
Flynn Liang1 小时前
Spring AI 2.0 深度解析:ChatClient、Advisor 链与 MCP——Java 工程师的 AI 落地最优解
java·人工智能·spring·大模型·架构设计·spring ai
灿飞1 小时前
Kotlin与Java虚拟机六:基础与类型系统:一切皆对象,但对象有代价
java·kotlin
计算机毕设定制辅导-无忧学长1 小时前
《基于微信小程序健康习惯激励系统设计与实现》
java·spring boot·mysql·微信小程序·uniapp·健康习惯激励系统
掘金者阿豪2 小时前
SQL Server数据迁移完成后,凌晨的数据库告警该怎么查?
前端·后端
鶴哥只手遮天2 小时前
AFSIM 2.9.0 深度解析·进阶卷第 1 章 插件源码精读:16 个 WSF 插件的架构与实现
后端