gpt4 book ai didi

javascript - 从 tmp 上传文件夹中删除旧文件的正确 NodeJS 代码

转载 作者:搜寻专家 更新时间:2023-10-31 22:52:47 26 4
gpt4 key购买 nike

我使用以下代码从 tmp 上传目录中删除旧文件:

       fs.readdir( dirPath, function( err, files ) {
if ( err ) return console.log( err );
if (files.length > 0) {
files.forEach(function( file ) {
var filePath = dirPath + file;
fs.stat( filePath, function( err, stat ) {
if ( err ) return console.log( err );
var livesUntil = new Date();
livesUntil.setHours(livesUntil.getHours() - 1);
if ( stat.ctime < livesUntil ) {
fs.unlink( filePath, function( err ) {
if ( err ) return console.log( err );
});
}
});
});
}
});

我每小时运行一次。这在大多数情况下都有效。但是我发现偶尔上传的内容会在上传过程中意外消失。我认为发生的事情是,当文件实际上正在上传时,在设置 stat.ctime 之前运行此代码 - 因此它在完成之前被删除。关于如何防止这种情况的任何建议?

谢谢!

最佳答案

为什么不在每次上传时都进行清理?

var fs = require('fs');

var fsio;
(function (fsio) {
var uploader = (function () {
function uploader() {
}
uploader.prototype.writeFile = function (fn, data, cb) {
var tempDest = '/tmp/' + fn;

// .. your write logic ..

// cleanup
cb(tempDest);
};

uploader.prototype.cleanup = function (fileDest) {

// .. your cleanup logic - move or copy/del ..

fs.unlink(fileDest);
};

uploader.prototype.upload = function (fn, data) {
this.writeFile(fn, data, this.cleanup);
};
return uploader;
})();
fsio.uploader = uploader;
})(fsio || (fsio = {}));

用法:

var fileupload = new fsio.uploader();
fileupload.upload("monkey.gif", []);

关于javascript - 从 tmp 上传文件夹中删除旧文件的正确 NodeJS 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21308714/

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