【问题标题】:Nodejs deleting uploaded files after specific timeNodejs在特定时间后删除上传的文件
【发布时间】:2021-12-02 15:49:32
【问题描述】:

我正在使用 Node 和 MongoDB 构建托管服务器。工作过程如下所示:

  1. 用户打开页面的表单包含 4 个输入:
    • 发件人电子邮件
    • 收件人电子邮件
    • 从发送者到接收者的消息
    • 文件(多个)
  2. 用户正确填写所有输入并在服务器上发送 POST 请求。
  3. 服务器使用 multer 处理表单并保存文件,然后在回调中,准备好从表单接收到的包含存储信息的字段数据对象并将其发送到 MongoLab 上的数据库。
  4. 在将文档保存到数据库的回调中,服务器向发送者和接收者发送邮件,并生成链接,他们可以从那里下载上传的文件。

现在我想在表单中实现额外的输入,用户可以设置从服务器中删除文件的日期。

所以有两件事要做:在用户设定的时间删除文件和删除数据库中的文档。

你有一些想法如何实现这样的事情吗?

【问题讨论】:

  • TTL Indexes 可能是您的解决方案。如果失败,您可能应该建立自己的基于“cron”的进程,可能基于node-cron 或类似的实现。
  • @NeilLunn 看起来很有趣。我会尝试实施它并给你反馈。谢谢你的时间! :)
  • @NeilLunn,谢谢,node-cron 的这个想法很棒! :)

标签: node.js mongodb


【解决方案1】:

要删除文件,您可以简单地使用fs.unlink()

const fs = require('fs');

const deleteFile = (file) => {
       fs.unlink("path/to/file/folder/"+file, (err) => {
           if (err) throw err;
       }
}

你想创建一个setTimeout(),但是你需要知道距离用户提供的日期还有多少时间,你应该这样做:

const time_remaining = (date_provided) => new Date(date_provided) - new Date();

那就用setTimeout():

let timeOuts = []; // We create an array of timeouts in case we want to cancel one later
// I assume you use express and body-parser
app.post('/upload', (req, res) => {
     const timer = setTimeout( () => deleteFile(req.body.file), time_remaining (req.body.date));
     timeOuts.push(timer);
}

【讨论】:

  • 看起来很有趣!我会尝试一下,稍后会给你反馈。谢谢你的时间! :)
猜你喜欢
  • 2019-03-02
  • 2020-10-06
  • 2011-02-03
  • 2021-09-12
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
相关资源
最近更新 更多