一、场景与架构设计

‌目标‌:通过HTTP接口上传图片,自动生成MD格式的图片引用代码(支持Base64或图床链接)。
‌技术栈‌:

  • ‌HTTP解析‌:Spring Boot(Java)处理上传请求
  • ‌图片转MD‌:Java原生代码实现Base64编码或图床存储
客户端(浏览器) → HTTP上传图片 → Spring Boot服务器 → 生成MD格式 → 返回结果

二、核心代码实现

  1. Spring Boot 文件上传接口
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.HashMap;
import java.util.Map;

@RestController
public class ImageToMdController {

    // 图床服务地址(示例)
    private static final String IMAGE_HOST = "https://img.example.com/";

    /**
     * 上传图片并生成MD格式
     * @param file 上传的图片文件
     * @param encodeType 编码类型(base64或url)
     */
    @PostMapping("/convert-to-md")
    public Map<String, String> convertImageToMd(
            @RequestParam("file") MultipartFile file,
            @RequestParam(value = "encodeType", defaultValue = "url") String encodeType) {

        Map<String, String> result = new HashMap<>();
        
        try {
            // 1. 校验文件类型
            if (!file.getContentType().startsWith("image/")) {
                throw new IllegalArgumentException("仅支持图片文件");
            }

            // 2. 生成MD格式代码
            String mdCode;
            if ("base64".equalsIgnoreCase(encodeType)) {
                mdCode = generateBase64Md(file);
            } else {
                mdCode = generateUrlMd(file);
            }

            result.put("code", "200");
            result.put("md", mdCode);
        } catch (Exception e) {
            result.put("code", "500");
            result.put("error", e.getMessage());
        }

        return result;
    }

    // 生成Base64格式MD代码
    private String generateBase64Md(MultipartFile file) throws Exception {
        byte[] bytes = file.getBytes();
        String base64 = java.util.Base64.getEncoder().encodeToString(bytes);
        return String.format("![%s](data:image/%s;base64,%s)",
                file.getOriginalFilename(),
                file.getContentType().split("/"), // 提取图片类型(如png)
                base64);
    }

    // 生成图床链接MD代码(需实现上传到图床)
    private String generateUrlMd(MultipartFile file) throws Exception {
        // 模拟上传到图床并返回URL(实际需调用图床API)
        String fileName = System.currentTimeMillis() + "_" + file.getOriginalFilename();
        String imageUrl = IMAGE_HOST + fileName;
        return String.format("![%s](%s)", file.getOriginalFilename(), imageUrl);
    }
}

  1. HTTP请求解析流程

结合前文手动解析逻辑,Spring Boot已自动完成以下步骤:

  1. ‌解析请求体‌:自动处理multipart/form-data格式
  2. ‌提取文件‌:通过MultipartFile对象获取图片字节流
  3. ‌处理编码‌:根据参数选择Base64或图床链接

三、客户端调用示例.

1. 使用curl测试

curl -X POST -F "file=@/path/to/image.png" http://localhost:8080/convert-to-md?encodeType=base64

2. 返回结果

{
  "code": "200",
  "md": "![image.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...)"
}

四、扩展功能实现

  1. 批量转换工具(Java实现)
public class BatchImageConverter {
    public static void main(String[] args) {
        // 从文件夹读取图片
        File dir = new File("images");
        for (File image : dir.listFiles()) {
            // 调用HTTP接口上传并获取MD代码
            String md = HttpUtil.post("http://localhost:8080/convert-to-md", image);
            System.out.println(md);
        }
    }
}

  1. 安全性增强
// 在Controller中添加以下校验
if (file.getSize() > 10 * 1024 * 1024) { // 限制10MB
    throw new IllegalArgumentException("文件大小超过限制");
}

// 过滤危险文件名
String fileName = file.getOriginalFilename();
if (fileName.contains("..") || fileName.contains("/")) {
    throw new IllegalArgumentException("非法文件名");
}

五、技术结合点总结

|  |

六、完整流程图

客户端 Spring Boot服务 图床/CDN POST /convert-to-md (上传图片) 校验文件类型和大小 生成Base64字符串 上传图片到图床 返回图片URL alt [选择Base64编码] [选择图床链接] 返回MD格式代码 客户端 Spring Boot服务 图床/CDN

通过以上方案,可实现从HTTP请求接收图片到生成Markdown格式的完整链路,满足技术文档、博客系统等场景的自动化图片处理需求。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐