核心实战:教你如何通过 HTTP 协议上传大文件至 Gemini 服务

核心实战:教你如何通过 HTTP 协议上传大文件至 Gemini 服务

人工智能

应采用分块上传、流式传输或预签名URL三种方法:一、分块上传需初始化、切片、逐片提交并校验;二、流式传输禁用Content-Length,启用Transfer-Encoding: chunked;三、通过预签名URL直传对象存储并回调确认。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

如果您尝试通过 HTTP 协议将大文件(如超过 10 MB 的 PDF、视频或 ZIP 文件)上传至 Gemini 服务,但遭遇连接中断、超时或 413 Request Entity Too Large 错误,则可能是由于 Gemini 服务端限制、客户端请求构造不当或网络分块策略缺失所致。以下是实现稳定上传的多种可行方法:

一、使用分块上传(Chunked Upload)并携带分片元数据

该方法绕过单次请求体大小限制,将文件切分为固定大小的数据块,逐个发送,并在每个请求中声明当前分片序号、总分片数及唯一上传 ID,由服务端负责重组。Gemini 服务支持此模式需配合特定 header 和 endpoint。

1、生成唯一 upload_id,例如通过 UUID v4 生成 upload_7a2b3c4d5e6f

2、向 POST /v1/uploads/init 发送初始化请求,body 包含 {"file_name": "report.pdf", "total_size": 104857600, "chunk_size": 5242880},获取服务端返回的 upload_url 和 max_chunk_index。

3、对文件按 5 MB 切片,依次向 PUT /v1/uploads/{upload_id}/chunk?index=0 提交第 0 片,header 中设置 Content-Type: application/octet-streamContent-Range: bytes 0-5242879/104857600

4、每片上传成功后校验响应中的 X-Chunk-Status: completed,失败则重传该 index 对应分片,最多重试 3 次。

二、启用 Transfer-Encoding: chunked 并禁用 Content-Length

该方法利用 HTTP/1.1 流式传输机制,不预先声明整个请求体长度,而是以动态分块方式推送数据,适用于无法预知压缩后大小或需边读边传的场景。Gemini 服务需配置为接受无 Content-Length 的 chunked 编码请求。

1、构造请求时移除 Content-Length header,显式添加 Transfer-Encoding: chunked

2、打开文件流,每次读取 64 KB 数据,将其长度(十六进制)+ CRLF + 数据内容 + CRLF 组装为一个 chunk,例如 1000\r\n[64KB binary]\r\n

千面数字人

千面 Avatar 系列:音频转换让静图随声动起来,动作模仿让动漫复刻真人动作,操作简单,满足多元创意需求。

下载

3、所有数据发送完毕后,发送终结 chunk:0\r\n\r\n

4、监控响应状态码,仅当收到 201 Created 且 body 含 {"upload_id": "..."} 时视为整体成功。

三、通过预签名 URL 上传至 Gemini 关联的对象存储后回调确认

该方法将上传压力转移至底层对象存储(如 Google Cloud Storage),Gemini 服务仅提供短期有效的预签名 URL,客户端直传文件后由存储系统触发 webhook 通知 Gemini 完成元数据绑定,规避服务端接收大请求的瓶颈。

1、向 GET /v1/uploads/presign?file_name=data.zip&expires_in=3600 请求预签名地址,获得含完整 query 参数的 URL,例如 https://storage.googleapis.com/...&X-Goog-Signature=...

2、使用 PUT 方法向该 URL 提交原始文件二进制流,header 中必须包含 Content-Type: application/zipx-upload-id: up_9f8e7d6c5b4a

3、等待对象存储返回 200 OK,此时文件已落盘,无需等待 Gemini 响应。

4、Gemini 服务将在 2 秒内通过内部事件监听完成资源注册,上传记录可在 GET /v1/uploads/up_9f8e7d6c5b4a 查询状态字段 "status": "processed"

本文地址:https://www.sztg.com.cn/article/600670.html

如非特殊说明,本站内容均来自于网友自主分享,如有任何问题均请联系我们进行处理!

猜您喜欢