gpt4 book ai didi

node.js - 如何使用 multer 清理临时文件

转载 作者:太空宇宙 更新时间:2023-11-03 21:56:57 27 4
gpt4 key购买 nike

我的nodejs应用程序接受由快速中间件强制执行的用户上传的文件,并且它使用multer .

典型的路由进行身份验证,检查用户是否被允许,然后进行导入,例如:

router.post('/:id/import', passport.authenticate('jwt', { session: false }), permit('admin'), function(req, res, next) {
MyClass.doImport(req.file.path).then(function(result) {
res.json(result);
}).catch(function(error) {
res.status(500).json(error);
});
});

如果没有错误,则效果很好,导入功能会删除该文件。但如果出现错误(例如无效或未经许可的用户),上传的文件将被创建并保留在磁盘上。

在所有权限中间件成功运行之前,我不想在磁盘上创建任何文件。我尝试使用 multer 作为链的最末端,即:

var app = express();

app.use( // ...

app.use(passport.initialize());
app.use(multer({dest:'./tmp/'}).single('file'));

但在身份验证错误时,我仍然在 tmp 中得到一个文件。

如何避免在所有其他中间件通过之前在磁盘上创建文件?

如果不可能,我可以添加一个仅在存在文件附件且上游出现错误时运行的中间件函数吗?

最佳答案

移动您的 multer 中间件,使其仅在相关路由处理程序之前执行。这样,如果任何其他中间件“拒绝”该请求,您就不会留下临时文件。例如:

function isLoggedIn(req, res, next) {
if (req.isAuthenticated())
return next();
res.redirect('/');
}
var fileUpload = multer({dest:'./tmp/'}).single('file');

var app = express();
// ...
app.use(passport.initialize());
// ...
app.put('/upload', isLoggedIn, fileUpload, function(req, res) {
// use `req.file`
});

关于node.js - 如何使用 multer 清理临时文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38312926/

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