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

在JS中使用@google/generative-ai直接上传内存Base64图片的方案咨询

直接从内存上传Base64图片到Gemini的替代方案

核心思路

官方SDK的GoogleAIFileManager.uploadFile仅支持本地文件路径,但我们可以直接调用谷歌文件上传REST API,将Base64解码后的二进制数据直接作为请求体上传,跳过本地存储的冗余步骤。

实现步骤

  • 解码Base64字符串为二进制Buffer(Node.js环境)或Blob(浏览器环境)
  • 构造符合要求的multipart/form-data请求,包含文件元信息和二进制数据
  • 发送POST请求到谷歌的文件上传端点,携带API Key
  • 解析响应获取文件对象,该对象与SDK返回的结构一致,可直接用于后续Gemini模型调用

Node.js环境代码示例

async function uploadBase64ToGemini(base64Data, mimeType, displayName, apiKey) {
  // 移除Base64前缀(如果存在)并解码为Buffer
  const cleanBase64 = base64Data.replace(/^data:image\/\w+;base64,/, '');
  const fileBuffer = Buffer.from(cleanBase64, 'base64');
  
  // 构造multipart/form-data表单
  const formData = new FormData();
  // 添加元数据字段(JSON格式)
  formData.append('metadata', JSON.stringify({
    mimeType: mimeType,
    displayName: displayName
  }), {
    contentType: 'application/json'
  });
  // 添加文件二进制数据
  formData.append('file', fileBuffer, {
    filename: displayName,
    contentType: mimeType
  });

  // 发送上传请求
  const response = await fetch(`https://generativelanguage.googleapis.com/v1/files/upload?key=${apiKey}`, {
    method: 'POST',
    body: formData
  });

  if (!response.ok) {
    throw new Error(`上传失败: ${await response.text()}`);
  }

  const uploadedFile = await response.json();
  console.log(`上传文件 ${uploadedFile.displayName} 成功,文件ID: ${uploadedFile.name}`);
  return uploadedFile;
}

// 使用示例
const yourBase64Image = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAAAAAAAD..."; // 替换为你的Base64图片数据
const yourApiKey = "YOUR_GEMINI_API_KEY"; // 替换为你的Gemini API Key

async function processImage() {
  try {
    const file = await uploadBase64ToGemini(yourBase64Image, "image/jpeg", "memory-uploaded-image.jpg", yourApiKey);
    // 后续调用Gemini模型示例
    const genAI = new GoogleGenerativeAI(yourApiKey);
    const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
    const result = await model.generateContent([file, "请描述这张图片的内容"]);
    console.log(result.response.text());
  } catch (error) {
    console.error('处理出错:', error);
  }
}

processImage();

说明

  • 该方法基于谷歌官方公开的REST API实现,与SDK的上传逻辑完全等价
  • 无需本地文件读写,直接在内存中完成Base64解码和上传流程
  • 返回的uploadedFile对象结构与GoogleAIFileManager.uploadFile返回的一致,可无缝对接后续的Gemini模型调用

内容的提问来源于stack exchange,提问作者iso53

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 19:53:11