You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Codeigniter Rest Api实现图片与元数据的同步上传

REST API同时上传图片与业务元数据的请求体设计方案

JSON本身为纯文本格式,无法直接承载二进制文件内容,针对你的需求,行业内有两种通用实现方案:

方案1:multipart/form-data混合提交(生产环境首选)

该方案是文件上传场景的标准实现,性能最优,适配绝大多数场景:

  • 请求头Content-Type设置为multipart/form-data; boundary=<分隔符字符串>,无需手动拼接边界,主流HTTP客户端会自动生成处理
  • 请求体分为两部分:
    • 第一部分为业务元数据,可直接以表单键值对方式提交所有业务字段,也可将整个元数据JSON对象作为单个表单字段的值,内容类型标注为application/json
    • 第二部分为图片二进制文件,自定义字段名(如image),内容类型标注为对应图片格式(如image/png)

简化版请求体结构示例

--自定义分隔符
Content-Disposition: form-data; name="metadata"
Content-Type: application/json

{
  "image_name": "日落风景",
  "upload_user": "zhang_san",
  "tags": ["旅行", "海边"],
  "shoot_time": "2024-05-20 18:30:00"
}
--自定义分隔符
Content-Disposition: form-data; name="image"; filename="sunset.png"
Content-Type: image/png

<二进制图片原始内容>
--自定义分隔符--

该方案优势:无需对二进制文件做编解码转换,请求体积小性能高,所有服务端框架、HTTP客户端都有原生支持,适配大文件上传场景。唯一局限性是请求体并非纯JSON结构。

方案2:Base64编码嵌入JSON(仅适用于小文件场景)

如果你的系统有强制要求请求体必须为纯JSON格式,可以选择该方案:

  • 将图片二进制内容编码为Base64字符串,作为JSON的一个字段值,可同时附带文件名、格式等附属信息
  • 请求头Content-Type直接设置为application/json即可

纯JSON请求体示例

{
  "image_name": "日落风景",
  "upload_user": "zhang_san",
  "tags": ["旅行", "海边"],
  "shoot_time": "2024-05-20 18:30:00",
  "image_info": {
    "filename": "sunset.png",
    "mime_type": "image/png",
    "base64_content": "iVBORw0KGgoAAAANSUhEUgAABAAAAA...<省略Base64编码内容>"
  }
}

该方案优势:完全符合纯JSON请求的要求,解析逻辑统一。缺点是Base64编码会让文件体积增大约33%,额外增加编解码性能损耗,仅适合10M以内的小图片使用,大图片场景会严重降低接口性能。

内容的提问来源于stack exchange,提问作者Erkan Kılıç

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 09:54:01