next.js 从Firebase Storage获取ReadStream并传入Openai API

2eafrhcq  于 2023-06-05  发布在  其他
关注(0)|答案(1)|浏览(132)

我正试图从Firebase存储下载一个映像,并将其传递到OpenAI端点
目前,我的代码看起来像这样

const fileStorage = await getStorageAdmin(uid, "/sample.png");
  const file = fileStorage.createReadStream();

  const maskStorage = await getStorageAdmin(uid, "/mask.png");
  const mask = maskStorage.createReadStream();

 const res = await openai.createImageEdit(
      file,
      prompt,
      mask,
      1,
      "512x512",
      "url"
  ).catch((e) => {
      console.log("ERROR: " + e)
  })

但运行此代码会导致Bad Request(状态代码:400)。
当我试着从硬盘阅读文件时,它工作起来没有问题

const file = fs.createReadStream("./images/anna.png");
  const mask = fs.createReadStream("./images/mask.png");

  const res = await openai.createImageEdit(
      file,
      prompt,
      mask,
      1,
      "512x512",
      "url"
  ).catch((e) => {
      console.log("ERROR: " + e)
  })

这意味着,API请求是好的,但从firebase存储阅读一定有问题,因为这是唯一的区别,但我不能找出我做错了什么。我不知道使用fs.createReadStream()和firebase-admin的file.createReadStream有什么区别。我认为这两个方法都应该返回图像内容,但一个工作,另一个不工作。
getStorageAdmin函数只返回对我想下载的文件的引用。

export const getStorageAdmin = async (uid:string, imagepath:string) =>{
    return await getStorage().bucket().file(uid+imagepath)
}
tkqqtvp1

tkqqtvp11#

createReadStream()函数是一个异步函数。
所以它会是:

const fileStorage = await getStorageAdmin(uid, "/sample.png");
const file = await fileStorage.createReadStream();

可以演示getStorageAdmin()的函数吗?

相关问题