PHP7.4 调用 Kimi 接口大文件如何拆分上传

大芳姑娘_7652

大芳姑娘_7652

2026-10-09

237人浏览

原创

必须严格遵循kimii官方三步分片上传流程:先调用/upload_init获取upload_id和预签名url,再逐块put上传字节范围数据,最后用etag调用/upload_complete合并;php 7.4需精确控制分片大小(通常5mb)、禁用输出缓冲、手动读取文件流。

php7.4 调用 kimi 接口大文件如何拆分上传

PHP 7.4 调用 Kimi 接口上传大文件,不能直接传整个文件——Kimi(由月之暗面提供)的 API 明确要求文件需先通过其指定的「分片上传流程」接入,不支持传统 multipart/form-data 一次性上传。核心不是 PHP 自己“拆”,而是严格遵循 Kimi 的预签名分片协议:先申请上传凭证,再分块上传,最后合并提交。

必须走 Kimi 官方分片上传流程

Kimi 的大文件上传(如 PDF、PPT、长音频等)强制使用三步式分片机制,PHP 7.4 只负责按其 API 规范调用,不能跳过或简化:

  • 第一步:发起 upload_init 请求 向 https://api.kimi.ai/v1/upload_init(以实际文档为准)POST 文件元信息(文件名、大小、MIME 类型),获取 upload_id 和每个分片所需的 presigned_urls 数组(含有效期、HTTP 方法、headers、签名 URL)。
  • 第二步:逐块上传分片 使用 cURL 或 Guzzle,对每个 presigned_urls[i] 发起 PUT 请求(非 POST),上传对应字节范围的数据块(如 0–5242879 字节)。注意:必须严格按字节偏移切分,不可用 JavaScript 的 slice() 逻辑替代;PHP 需用 fopen(..., 'rb') + fseek() + fread() 精确读取每块。
  • 第三步:提交合并请求 所有分片上传成功后,调用 /v1/upload_complete 提交 upload_id 和各分片的 ETag(即响应头 Etag 值),Kimi 后端完成校验与合成,返回可用于后续推理的 file_id。

PHP 7.4 实现关键点

避免常见踩坑,这些细节直接影响是否能成功上传:

Kimi Search
Kimi Search

使用 Moonshot Kimi API 的 $web_search 内置工具进行联网搜索。当需要进行网络搜索获取实时信息时使用,支持中文和英文搜索查询。需要配置 MOONSHOT_API_KEY。

下载
  • 禁用 output buffering 和超时干扰:上传过程可能耗时较长,开头加 ob_end_clean(); set_time_limit(0);,但不要依赖 max_execution_time——分片是多次独立 HTTP 请求,每次应控制在 30 秒内完成。
  • 分片大小必须与 Kimi 要求一致:官方通常要求 5MB/块(5242880 字节),最后一块可小于该值。PHP 计算方式:$chunkSize = 5 * 1024 * 1024;,用 ceil($fileSize / $chunkSize) 得总块数。
  • 手动构造字节范围,不依赖 $_FILES:Kimi 不接收表单上传,PHP 只需读本地文件流。示例片段:
    for ($i = 0; $i 
  • 检查并透传所有 presigned_url headers:比如 x-amz-date、content-type、content-md5(如有要求),缺失会导致 403 或 400 错误。

不需要调 PHP 或 Nginx 的上传限制参数

因为整个流程绕过了 PHP 的 $_FILES 机制和 Web 服务器的 body 解析层:文件不经过 upload_tmp_dir,不触发 upload_max_filesize、post_max_size、client_max_body_size 等限制。你只需确保 PHP 能发起外部 HTTPS 请求(cURL 启用、SSL 证书可信)、磁盘有读取权限、网络能直连 Kimi API(注意企业防火墙或代理拦截)。

失败时重点排查方向

上传中断或报错,优先查这四类问题:

  • upload_init 返回的 presigned_urls 过期:Kimi 签名通常仅 10–30 分钟有效,上传需在此窗口内完成;建议分片上传逻辑不阻塞、不休眠。
  • ETag 不匹配:PUT 分片响应头中的 Etag 必须原样传给 upload_complete,大小写敏感,带引号与否需一致。
  • 字节偏移错位或重复:例如第 2 块从 5242880 开始,但读了 5242881 字节,导致后续全部错位;可用 md5_file() 对每个分片临时文件校验。
  • 未处理 429 或 503 重试:Kimi 接口可能限频,对非 2xx 响应需指数退避重试(如 1s、2s、4s),而非直接报错退出。

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

10264

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

6061

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2095

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

3808

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4514

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3531

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

5037

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

3962

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

11922

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
零基础新手入门PHP教程
零基础新手入门PHP教程

共237课时 | 49.2万人学习

新版php入门教程
新版php入门教程

共85课时 | 49.7万人学习

李炎恢PHP视频教程第一季
李炎恢PHP视频教程第一季

共136课时 | 61.1万人学习