如何使用 GraphQL 从 mongodb gridfs 中获取文件?

How to fetch file from mongodb gridfs using GraphQL?

我已完成文件上传,现在我想使用 graphql 从 mongodb 获取文件。我试图获取文件块然后合并它,但它没有像我预期的那样工作。
那么如何从 graphql 查询中的 mongodb 获取整个文件?

这里我返回 bas64 作为图像字符串,这对于较大的文件大小来说是不可取的

const downloadFile = async (fileId) => {
  const bucket = new mongoose.mongo.GridFSBucket(mongoose.connection.db, {
    bucketName: 'files',
  });
  return new Promise((resolve, reject) => {
    // temporary variable to hold image
    var data = [];

    // create the download stream
    const readstream = bucket.openDownloadStream(new ObjectID(fileId));
    readstream.on('data', function (chunk) {
      data.push(chunk);
    });
    readstream.on('error', async (error) => {
      reject(error);
    });
    readstream.on('end', async () => {
      let bufferBase64 = Buffer.concat(data);
      const img = bufferBase64.toString('base64');
      resolve(img);
    });
  });
};

这是获取图片的查询

async getImage(_, { fileId }) {
  try {
    const img = await downloadFile(fileId);
    return img;
  } catch (error) {
    throw new Error(error);
  }
},