如何根据openai官网的FileID下载文件

news2024/11/14 2:14:32

我的chatgpt网站,哈哈: https://chat.xutongbao.top/

 file-type的版本需要注意:

     "file-type": "^15.0.0",

const FileType = require('file-type')


const assistantsDownloadFileOnAzure = async (req, res) => {
  let { apiKey = 'sk-xxx', fileIds = [] } = req.body
  if (apiKey === apiKeyOnServer) {
    if (Array.isArray(fileIds) && fileIds.length > 0) {
      let promiseListForDownload = fileIds.map((item) => {
        return new Promise(async (resolve, reject) => {
          const fileRes = await openai.files.content(item)
          const bufferView = new Uint8Array(await fileRes.arrayBuffer())

          let buffer = Buffer.from(bufferView)
          FileType.fromBuffer(buffer).then((fileTypeBlobRes) => {
            console.log('fileTypeBlobRes', fileTypeBlobRes)
            if (fileTypeBlobRes?.ext) {
              let localPath = `/temp/ai/assistants/${Date.now()}.${fileTypeBlobRes?.ext}`
              fs.writeFile(
                localPath,
                bufferView,
                (err) => {
                  if (err) {
                    throw err
                  }
                  console.log('The file has been saved!')
                  resolve(localPath)
                }
              )
            } else {
              reject()
            }

          })
        })
      })

      let localFileList = await Promise.all(promiseListForDownload)


      let promiseListForUpload = localFileList.map((item) => {
        return new Promise((resolve) => {
          // 文件上传
          let now = Date.now()

          let localFile = item
          let localFileArr = localFile.split('/')
          let key = `ai/assistants/${now}-${
            localFileArr[localFileArr.length - 1]
          }`
          let historyKey = key
          putExtra.checkCrc = false
          formUploader.putFile(
            uploadToken,
            key,
            localFile,
            putExtra,
            async function (respErr, respBody, respInfo) {
              if (respErr) {
                console.log('上传SD图片失败【1】', respErr)
              }
              if (
                respInfo.statusCode == 200 ||
                (respInfo.statusCode === 614 &&
                  respBody.error === 'file exists')
              ) {
                let key = ''
                if (respBody.data) {
                  key = respBody.data.key
                }
                if (!key) {
                  key = historyKey
                }
                resolve(key)
              } else {
                console.log(respInfo.statusCode)
                console.log('上传SD图片失败【2】', respBody)
              }
            }
          )
        })
      })

      let cdnFileList = await Promise.all(promiseListForUpload)
      res.send({
        code: 200,
        data: {
          fileIds,
          localFileList,
          cdnFileList,
        },
        message: '成功',
      })
    } else {
      res.send({
        code: 400,
        message: '失败:参数fileIds',
      })
    }
  } else {
    res.send({
      code: 400,
      message: '失败:参数apiKey',
    })
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1404450.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抖音出的AI工具火了!自动生成抖音文案,一键脚本数字人成片!

一些结论 抖音即创是一个一站式的智能创意生产与管理平台。 视频创作: AI视频脚本、数字人、一键成片 图文创作: 商品卡、图文工具 直播创作: AI背景、AI文案 抖音即创目前处于公测,全部功能免费使用! 抖音即创是什么? “抖音即创”是一…

复杂高层建筑环境多模态导航服务和引导管理机器人系统设计(预告)

课题基础 机器人工程ROS方向应用型本科毕业设计重点课题学生验收成果 将上面这篇所涉及的算法等应用到如下环境中。 Gazebo新环境AWS RoboMaker Hospital医院场景适用于ROS1和ROS2 高层可以简化为多层测试。最典型的就是两层及以上。 简介 随着城市化进程的加速和高层建筑…

08-微服务Seata分布式事务使用

一、分布式事务简介 1.1 概念 事务ACID: A(Atomic):原子性,构成事务的所有操作,要么都执行完成,要么全部不执行,不可能出现部分成功部分失 败的情况。 C(Consistency&…

软件设计师——法律法规(四)

📑前言 本文主要是【法律法规】——软件设计师——法律法规的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 &#x1f304…

encodeURI 和 encodeURIComponent

encodeURI 和 encodeURIComponent 是用来处理加密 decodeURI 和 decodeURIComponent 是用来处理解密 encodeURI 和encodeURIComponent 区别: 唯一区别就是编码的字符范围 encodeURI方法不会对下列字符编码 ASCII字母 数字 ~!#$&():/,;?’ encodeURIComponent方…

电脑录屏软件大比拼,哪个最适合你?

现如今,电脑录屏软件成为了许多用户记录、分享和教学的重要工具。从游戏玩家到专业制作人员,都需要高效的录屏软件。本文将介绍三款优秀的电脑录屏软件,通过详细的步骤和简洁的介绍,帮助用户轻松掌握这些工具的使用方法。 电脑录屏…

基于springboot+vue的台球管理系统

摘要 台球管理系统是一款基于Spring Boot和Vue.js技术栈构建的现代化系统,旨在提供全面而高效的台球场馆管理服务。该系统通过整合前后端技术,实现了场馆预约、会员管理、比赛统计等核心功能,为台球场馆管理员和玩家提供了便捷、智能的管理和…

在铸造铸铁平台时应用工艺有哪些——河北北重

铸造铸铁平台时,常用的工艺包括砂型铸造、金属型铸造和连铸工艺。 砂型铸造:砂型铸造是最常用的铸造工艺之一,适用于中小型铸铁平台的生产。该工艺使用砂模具,将铁水倒入模具中,待冷却后取出成型。砂型铸造工艺成本较低…

Flutter 滚动布局:sliver模型

一、滚动布局 Flutter中可滚动布局基本都来自Sliver模型,原理和安卓传统UI的ListView、RecyclerView类似,滚动布局里面的每个子组件的样式往往是相同的,由于组件占用内存较大,所以在内存上我们可以缓存有限个组件,滚动…

说说你对选择排序的理解?如何实现?应用场景?

一、是什么 选择排序(Selection sort)是一种简单直观的排序算法,无论什么数据进去都是 O(n) 的时间复杂度,所以用到它的时候,数据规模越小越好 其基本思想是:首先在未排序的数列中找到最小(or最大)元素&a…

工业计算机应用——AGV自动导引车行业

工业计算机在AGV行业的应用 自动导引车(AGV)是现代物流系统中的重要组成部分,能够在无人操作的情况下自动完成货物的搬运和运输。随着工业自动化的发展,工业计算机在AGV行业的应用越来越广泛,为AGV系统的智能化和高效化提供了有力支持。 一、工业计算机在AGV行业的应用场…

ICC2:如何优化网表中的assign语法

更多学习内容请关注「拾陆楼」知识星球 拾陆楼知识星球入口 问题来自星球提问: ICC2中有两种解决方法: 1) set_app_options -name opt.port.eliminate_verilog_assign -value true 工具优化时自己插buffer解决 2) change_name -hier -rule verilog 需要注意的是: 第一个opti…

Git学习笔记(第6章):GitHub操作(远程库操作)

目录 6.1 远程库操作 6.1.1 创建远程库 6.1.2 命名远程库 6.1.3 本地库推送到远程库(push) 6.1.4 远程库拉取到本地库(pull) 6.1.5 远程库克隆到本地库(clone) 6.2 团队内协作 6.3 跨团队协作 6.4 SSH免密登录 6.1 远程库操作 命令 作用 git remote -v 查看所有远程…

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(16)-Fiddler如何充当第三者,再识AutoResponder标签-上篇

1.简介 Fiddler充当第三者,主要是通过AutoResponder标签在客户端和服务端之间,Fiddler抓包,然后改包,最后发送。AutoResponder这个功能可以算的上是Fiddler最实用的功能,可以让我们修改服务器端返回的数据&#xff0c…

MySQL-SQL-DCL

DCL-介绍 DCL-管理用户 1、查询用户 2、创建用户 3、修改用户密码 4、删除用户 注意: DCL-权限控制 1、查询权限 2、授予权限 授予全部权限 3、撤销权限 注意:

vue3 常见的路由传参无刷新修改当前路由url带参

无刷新修改当前路由url带参 //tabs切换部分 <el-tabs v-model"activeName" class"demo-tabs" tab-click"handleClick"><el-tab-pane v-for"(item,index) in tagList" :label"item.title" :name"item.name…

基于springboot酒店预订系统

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 前端技术&#xff1a;AdminLTEjQueryvue.jselementuijsp 服务端技术&#xff1a;springbootmybatis 本系统功能包括&#xff1a; 一、…

展锐T618_虎贲T618紫光展锐安卓核心板规格参数

基于紫光展锐八核T618平台的纯国产化方案&#xff0c;采用了开放的智能Android操作系统&#xff0c;并集成了4G网络、2.5G5G双频WIFI(可支持1*1 MIMO)、BLUETOOTH近距离无线传输技术以及GNSS无线定位技术。用户可以根据特定场合的需求&#xff0c;选择合适的嵌入式ARM核心模块&…

司铭宇老师:二手房营销培训课程:二手房销售技巧和话术

二手房营销培训课程&#xff1a;二手房销售技巧和话术 在房地产市场中&#xff0c;二手房销售一直是一个挑战性极强的领域。由于面对的客户群体多样&#xff0c;房源条件各异&#xff0c;销售人员必须具备高超的销售技巧和精湛的话术能力。本文将通过实战案例分析&#xff0c;深…

手握中下牌型如何赢掼蛋?

中下牌型的特点&#xff1a;牌不是很好&#xff0c;炸弹少&#xff0c;但是牌型种类较多&#xff0c;并且有上手牌&#xff0c;适合配合对方&#xff0c;发动进攻。手握此类牌型&#xff0c;可采取协同进攻、全面防御、顺势突围三种方式来扭转双下局面。 一、协同进攻 此时应当…