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

我的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',
    })
  }
}

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐同保

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值