我使用 multer 。
问题一
当我将以下代码片段放入 app.js
app.use(multer({
dest: './uploads'
}
).single('file'));
它在根文件夹下创建了一个新文件夹,我的问题是关于这个新文件夹的生命周期,什么时候会被删除? 100 call 后文件夹的大小是多少?
问题2
如果我不想限制文件大小,我应该在配置中放些什么?
app.use(multer({
dest: './public/profile/img/',
limits: {
fieldNameSize: 50,
files: 1,
fields: 5,
fileSize: 1024 * 1024
},
更新
我的应用程序构建如下
app.js 文件包含
app.use(multer({
dest: './uploads'
}
).single('file'));
app.use('/', routes, function (req, res, next) {
next();
});
路由文件如下所示
appRouter
.post('*', function (req, res) {
handler.dispatch(req, res)
})
.get('*', function (req, res) {
handler.dispatch(req, res)
})
在第三个文件中,我使用如下解压缩
update: function (req, res) {
var filePath = path.join(req.file.destination, req.file.filename);
var unzipper = new Unzipper(filePath);
unzipper.on("extract", function () {
console.log("Finished extracting");
res.sendStatus(200);
});
unzipper.on('progress', function (fileIndex, fileCount) {
console.log('Extracted file ' + (fileIndex + 1) + ' of ' + fileCount);
});
unzipper.on('list', function (files) {
console.log('The archive contains:');
console.log(files);
});
unzipper.on('error', function (err) {
console.log('Caught an error', err);
});
unzipper.extract({
path: "./"
});
}
下面是我的节点应用程序的结构,有人可以建议如何以及在何处(哪个文件) 建议 使用 Raf 代码并向文件添加日期时间,我可以添加排序…
原文由 user4209821 发布,翻译遵循 CC BY-SA 4.0 许可协议
我会尝试用一个真实的例子来回答你的问题,至少你可以从中学到一些东西。如果您希望删除除最近上传之外的所有内容,那么您需要编写某种逻辑来区分哪些是最近上传的,哪些是旧上传的。下面我将描述,我将如何着手解决这个问题,可能并不完美,但我就是这样做的。
该文件夹永远不会自动删除,除非您手动或以编程方式删除它。
具有 100 个调用的文件夹的大小假设在每次调用中您上传一个 x 大小的文件将是 x 乘以 100
您不想限制文件上传,不提供限制配置,但建议指定文件上传限制。
您显然可以将 multer 附加到应用程序或创建它的实例并将其传递给路由。我更喜欢第二种方法:
多重配置
如上图,我不让multer给上传的文件起一个随机的名字。我所做的是,获取文件名,去掉其扩展名,然后使用
Date.now()
这将给我附加上载文件扩展名的当前时间戳。如果我上传六次,它们将显示如下(我上传的大部分是 .jpg,取自文件名)。上传将如何结束(时间戳会不同)
我将上面的
storage
附加到 multer 的一个实例,如下所示:现在我可以将
upload
传递给处理文件上传的路由,如下所示:将上传附加到路由,如下所示
假设您一直在上传,然后在某个时候您想要列出上传目录中的所有文件。路线如下:
列出上传目录中的所有文件
你想删除上传目录中的所有文件,路径如下:
删除上传目录中的所有文件
如果你希望同步删除所有文件那么你必须调用同步版本的 readdir (readdirSync) 和取消链接 (unlinkSync)
现在要删除除最新上传的文件以外的所有文件。好吧,我已经将所有文件名都设置为时间戳。所以我会做如下事情:
删除除最近的所有文件(最近的文件是最近的时间戳作为文件名的文件)。
我没有在我的示例中添加任何限制,但建议这样做。默认文件大小限制是无限的,如果您不将其包含在生产环境中,那么您将容易受到评论中指出的 DoS 攻击。
要使上述文件操作正常工作,您需要加载
关于您的第二点,只需跳过 limits 属性,默认限制将为无穷大。
出于演示目的,我在一个工作的 nodejs 应用程序中设置了以上内容,见下文:
应用程序.js
视图/upload.jade