我正在尝试检查文件夹中是否存在图像。 如果存在,我想将其流传输到res(我正在使用Express) 如果不存在,我想做另一件事。
我创建了一个异步函数,该函数应该返回图像的流(如果存在)或返回false(如果不存在)。
执行此操作时会得到一个流,但是浏览器上的负载是无限的,好像该流有问题。
这是我所能获得的最少复制品: Link to runnable code
const express = require('express');
const path = require('path');
const fs = require('fs');
const app = express();
app.get('/', async (req, res) => {
// Check if the image is already converted by returning a stream or false
const ext = 'jpg';
const imageConvertedStream = await imageAlreadyConverted(
'./foo',
1,
'100x100',
80,
ext
);
// Image already converted, we send it back
if (imageConvertedStream) {
console.log('image exists');
res.type(`image/${ext}`);
imageConvertedStream.pipe(res);
return;
} else {
console.log('Image not found');
}
});
app.listen(3000, () => {
console.log('Server started on port 3000');
});
async function imageAlreadyConverted(
basePath,
id,
size,
quality,
extWanted
) {
return new Promise(resolve => {
// If we know the wanted extension, we check if it exists
let imagePath;
if (extWanted) {
imagePath = path.join(
basePath,
size,
`img_${id}_${quality}.${extWanted}`
);
} else {
imagePath = path.join(basePath, size, `img_${id}_${quality}.jpg`);
}
console.log(imagePath);
const readStream = fs.createReadStream(imagePath);
readStream.on('error', () => {
console.log('error');
resolve(false);
});
readStream.on('readable', () => {
console.log('readable');
resolve(readStream);
});
});
}
我的图像中有95%可用,并且我需要性能,我想用fs.stats检查然后创建流比尝试创建流和处理错误要花费更长的时间。
答案 0 :(得分:0)
问题出在“可读”事件上。一旦切换到“打开”事件,一切都很好。