gpt4 book ai didi

javascript - 保存使用 GridFS 下载的文件以在网站上使用

转载 作者:太空宇宙 更新时间:2023-11-04 01:40:42 24 4
gpt4 key购买 nike

所以我有这个代码:

downloadFile: async (req, res) => {
var mongoose = require('mongoose');
var Grid = require('gridfs-stream');
mongoose.connect(config.db, {useNewUrlParser: true},).catch(e => console.log(e));
var conn = mongoose.connection;
Grid.mongo = mongoose.mongo;
var gfs = Grid(conn.db);
var file_id = req.params.logoId;
console.log(file_id);
return gfs.files.find({_id: file_id}).toArray(function (err, files) {
if (err) {
console.log(err);
}
if (files.length > 0) {
console.log(files[0]);
var mime = files[0].contentType;
var filename = files[0].filename;
res.set('Content-Type', mime);
res.set('Content-Disposition', "inline; filename=" + filename);
var read_stream = gfs.createReadStream({_id: file_id});
read_stream.pipe(res);
return res;
} else {
console.log('File not found')
}
});
}

执行它会导致我的浏览器通过浏览器下载物理文件。如何将其重定向以保存在服务器上(?)并将其用作网站上的 Logo ?

最佳答案

您当前正在从 gfs 读取文件并通过管道传输到响应。相反,您可以简单地通过管道传输到文件:

var read_stream = gfs.createReadStream({_id: file_id});
var imgFile = fs.createWriteStream("images/logos/logo.jpg");
var write_stream = read_stream.pipe(imgFile);

此操作应在服务器启动时执行。如果文件只是一个 Logo ,我认为在请求内执行不是一个好主意。但是,如果您仍然希望在请求中执行此操作,则需要处理流 finish 事件,并且仅在 write_stream 完成处理文件时返回响应:

write_stream.on("finish", function() { 
...
res.send(...);
});

关于javascript - 保存使用 GridFS 下载的文件以在网站上使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53082351/

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