node把本地图片转base64

javascript 复制代码
function fileToGenerativePart(path, mimeType) {
  return {
    inlineData: {
      data: Buffer.from(fs.readFileSync(path)).toString('base64'),
      mimeType,
    },
  }
}

     let imageParts = []
      if (Array.isArray(visionImgList) && visionImgList.length > 0) {
        visionImgList = visionImgList
          .filter((item) => item.url)
          .map((item) => item.url)
        let list = visionImgList
        let promiseListForDownload = list.map((item) => {
          return new Promise((resolve) => {
            let sdUrl = item
            let urlObj = new URL(sdUrl)
            const client = urlObj.protocol == 'https:' ? https : http
            client.get(sdUrl, async (httpRes) => {
              let fileName = Date.now()
              let endIndex =
                sdUrl.indexOf('?') > 0 ? sdUrl.indexOf('?') : sdUrl.length
              sdUrl = sdUrl.slice(0, endIndex)
              let pointIndex = sdUrl.lastIndexOf('.')
              let mimeType = sdUrl.slice(pointIndex + 1) //PNG - 图片/png JPEG - image/jpeg WEBP - image/webp HEIC - 图片/heic HEIF - image/heif
              let urlCdnArr = sdUrl.split('/')

              let filePath = `/temp/ai/geminiImages/${fileName}-${
                urlCdnArr[urlCdnArr.length - 1]
              }`
              let stream = fs.createWriteStream(filePath)
              httpRes.pipe(stream)
              stream.on('finish', async () => {
                resolve({ filePath, mimeType: `image/${mimeType}` })
              })
            })
          })
        })

        let localFileList = await Promise.all(promiseListForDownload)
        imageParts = localFileList.map((item) => {
          return fileToGenerativePart(item.filePath, item.mimeType)
        })

我开发的chatgpt网站:

https://chat.xutongbao.top

相关推荐
爱学习的程序媛9 分钟前
“数字孪生”详解与前端技术栈
前端·人工智能·计算机视觉·智慧城市·信息与通信
海石16 分钟前
微信小程序开发02:原始人也能看懂的着色器与视频处理
前端·微信小程序·视频编码
程序员Sunday17 分钟前
Claude Code 生态爆发:5个必知的新工具
前端·人工智能·后端
ChoSeitaku29 分钟前
NO.2|proto3语法|消息类型|通讯录|文件读取|enum类型
java·服务器·前端
小J听不清35 分钟前
CSS 边框(border)全解析:样式 / 宽度 / 颜色 / 方向取值
前端·javascript·css·html·css3
用户2557788508135 分钟前
axios全局重复请求取消
前端
前端付豪40 分钟前
实现一个用户可以有多个会话
前端·后端·llm
林古1 小时前
我在 WSL 里控制 Windows Chrome 的一次实战复盘(OpenClaw)
前端
想不到一个好的ID1 小时前
Claude Code 初学者必看指南
前端·后端
一枚菜鸟_1 小时前
04-Flutter状态管理终极指南-Riverpod3.x从入门到精通
前端