如何使用 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);
}
},
我已完成文件上传,现在我想使用 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);
}
},