当前位置: 首页 > article >正文

使用 Postman 上传二进制类型的图片到后端接口写法

我们有的时候会有需求,就是通过 postman 传递二进制图片到后端接口,如下图:

在这里插入图片描述

那我们的 Java 接口需要怎么写呢?

Spring Boot 接收这些数据的方式需要使用 @RequestBody 注解来处理原始的二进制数据(byte[])。

1. 使用 @RequestBody 接收二进制数据

如果在 Postman 中选择了 binary,那么将直接上传文件的二进制数据。可以在 Spring Boot 中通过 @RequestBody 来接收这些二进制数据,并将其保存为文件。

2. Controller 代码示例

下面是一个简单的 Spring Boot 控制器,用于接收 Postman 上传的图片并保存到本地磁盘:

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

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

@RestController
@RequestMapping("/api/upload")
public class FileUploadController {

    private static final String UPLOAD_DIR = "uploads/";

    @PostMapping("/image")
    public ResponseEntity<String> uploadImage(@RequestBody byte[] fileBytes) {
        // 判断文件是否为空
        if (fileBytes.length == 0) {
            return ResponseEntity.badRequest().body("No file uploaded");
        }

        try {
            // 保存文件到服务器指定路径(这里假设保存为 uploaded_image.jpg)
            File dest = new File(UPLOAD_DIR + "uploaded_image.jpg");

            // 确保目标目录存在
            dest.getParentFile().mkdirs();

            // 写入文件
            try (FileOutputStream fos = new FileOutputStream(dest)) {
                fos.write(fileBytes);
            }

            return ResponseEntity.ok("File uploaded successfully: " + dest.getName());
        } catch (IOException e) {
            return ResponseEntity.status(500).body("File upload failed: " + e.getMessage());
        }
    }
}

3. 详细说明

  1. @RequestBody byte[] fileBytes:

    • @RequestBody 用于接收请求体中的数据,Postman 发送的二进制数据将被自动映射为 byte[] 数组。
  2. 保存文件:

    • 文件会被保存到 uploads/ 目录下,可以根据需要修改保存路径和文件名。
    • 如果目标文件夹不存在,会自动创建。
  3. 返回响应:

    • 如果文件上传成功,会返回 “File uploaded successfully”。
    • 如果上传失败,会返回错误信息。
  4. 配置文件上传大小(可选)

    • 如果你的文件比较大,可以在 application.properties 或 application.yml 中设置上传文件的最大大小。例如:
# 设置文件上传的最大大小
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

扩展:

我使用 postman 传二进制类型图片到后端的时候遇到一个坑,可以参考这篇文章 - 《使用 postman 传递 binary 类型的图片到后端接口遇到的坑》


扩展:

前端如何传递二进制图片到后端接口?

info 是使用 Antd 的 Upload 的 Dragger 的 onChange 回调参数,参考 Antd 官方文档 - Upload 上传

const updateLoad = (info) => {
    const file = info.file;

    // 使用 FileReader 来读取文件为二进制数据
    const reader = new FileReader();

    reader.onload = () => {
      // 获取二进制数据(ArrayBuffer)
      const binaryData = reader.result;
	  sendRequest(binaryData).then((res) => {
          if (res) {
            setUploadFile(res);
          }
      }).catch((err) => {
          showErrorMsg(err);
      });
    };

    // 读取文件为 ArrayBuffer(二进制)
    reader.readAsArrayBuffer(file);
  }

http://www.kler.cn/a/430176.html

相关文章:

  • 详解Sonar与Jenkins 的集成使用!
  • 数据挖掘实训:天气数据分析与机器学习模型构建
  • HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现
  • 『SQLite』解释执行(Explain)
  • 代码随想录算法训练营day23
  • MakeFile使用指南
  • 通俗易懂理解:网络安全恶意节点的检测与哨兵节点的激活【论文+代码】
  • 杨振宁大学物理视频中黄色的字,c#写程序去掉
  • net8 WebAP Swagger
  • JS中的原型链与继承
  • PyTorch张量的backward方法和.grad属性介绍
  • 鸿蒙Next开发实战教程-使用WebSocket实现即时聊天
  • 如何实现多级缓存以及缓存之间数据的一致性
  • vscode鼠标右键跳转到定义只能跳转到头文件
  • C++ 列表初始化(initializer_list)
  • Go validator验证参数是否零值以及是否传递
  • IDEA创建Spring Boot项目配置阿里云Spring Initializr Server URL【详细教程-轻松学会】
  • IO进程学习笔记
  • 最新 AI 编程工具全面对比:v0、Bolt.new、Cursor、Windsurf
  • 树莓派 PICO RP2040 MACOS 使用
  • ArcMap 分析面到线、线到线、面重叠等功能操作
  • SQL中IN和NOT操作符的用法
  • 概率论相关知识随记
  • 【大语言模型】LangChain LCEL 表达式语言
  • leetcode-88.合并两个有序数组(易理解)
  • DApp开发如何平衡性能与去中心化?