我有一个node.js应用程序,可定期轮询图像并将其存储到文件系统中。
问题是,当node.js覆盖图像时,那时访问网站的人将到处看到空白图像(因为此时图像被覆盖)。
只有在轮询图像时才会发生这几秒钟,但这很烦人。无论如何,在我们覆盖它的时候仍然可以提供图像吗?
保存/覆盖图片的代码:
// This method saves a remote path into a file name.
// It will first check if the path has something to download
function saveRemoteImage(path, fileName)
{
isImagePathAvailable(path, function(isAvailable)
{
if(isAvailable)
{
console.log("image path %s is valid. download now...", path);
console.log("Downloading image file from %s -> %s", path, fileName);
var ws = fs.createWriteStream(fileName);
ws.on('error', function(err) { console.log("ERROR DOWNLOADIN IMAGE FILE: " + err); });
request(path).pipe(ws);
}
else
{
console.log("image path %s is invalid. do not download.");
}
});
}
提供图片的代码:
fs.exists(filePath, function(exists)
{
if (exists)
{
// serve file
var stat = fs.statSync(filePath);
res.writeHead(200, {
'Content-Type': 'image/png',
'Content-Length': stat.size
});
var readStream = fs.createReadStream(filePath);
readStream.pipe(res);
return;
}
答案 0 :(得分:2)
我建议将新版本的图像写入临时文件:
var ws = fs.createWriteStream(fileName + '.tmp');
var temp = request(path).pipe(ws);
完全下载文件时
temp.on('finish', function() {
fs.rename(fileName + '.tmp', fileName);
});
我们使用'finish'
event,当所有数据都写入底层系统时被触发,即。文件系统。
答案 1 :(得分:1)
可能是
更好_fileName
);