gpt4 book ai didi

node.js - 将图像缓存到文件系统并将图像传输到响应

转载 作者:搜寻专家 更新时间:2023-10-31 23:01:40 38 4
gpt4 key购买 nike

我的目标是构建一个简单的文件系统缓存系统,以减少我们需要为缩略图调用 API 的次数。该过程是检查图像是否已存在于文件系统 fs.stat 中,如果不存在,则从 API 端点请求图像,同时将图像写入文件系统。我希望我可以同时将请求传输到文件系统和响应,但我认为这是不可能的,所以我首先将响应流式传输到文件系统,然后创建一个流来传输图像文件系统到 response 对象。

它运行良好,但我必须相信这是在 node.js 中完成此任务的更有效/优化的方式。有什么想法吗?

    function (req, res, next) {

// Check to see if the image exists on the filesystem
// TODO - stats will provide information on file creation date for cache checking
fs.stat(pathToFile, function (err, stats) {
if (err) {

// If the image does not exist on the file system
// Pipe the image to a file and then to the response object
var req = request.get({
"uri": "http://www.example.com/image.png",
"headers": {
"Content-Type": "image/png"
}
});

// Create a write stream to the file system
var stream = fs.createWriteStream(pathToFile);
req.pipe(stream);
stream.on('finish', function () {
fs.createReadStream(pathToFile)
.pipe(res);
})
}
else {

// If the image does exist on the file system, then stream the image to the response object
fs.createReadStream(pathToFile)
.pipe(res);
}
})
}

最佳答案

您可以使用 ThroughStream 来完成此操作,而无需等待整个文件写入您的文件系统。这是可行的,因为 ThroughStream 将在内部缓冲通过管道传输到其中的数据。

var stream = require('stream')
function (req, res, next) {

// Check to see if the image exists on the filesystem
// TODO - stats will provide information on file creation date for cache checking
fs.stat(pathToFile, function (err, stats) {
if (err) {

// If the image does not exist on the file system
// Pipe the image to a file and the response object
var req = request.get({
"uri": "http://www.example.com/image.png",
"headers": {
"Content-Type": "image/png"
}
});

// Create a write stream to the file system
req.pipe(
new stream.PassThrough().pipe(
fs.createWriteStream(pathToFile)
)
)

// pipe to the response at the same time
req.pipe(res)
}
else {

// If the image does exist on the file system, then stream the image to the response object
fs.createReadStream(pathToFile)
.pipe(res);
}
})
}

关于node.js - 将图像缓存到文件系统并将图像传输到响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39232296/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com