Удалить файл после использования response.download () в node.js? - PullRequest
0 голосов
/ 16 января 2020

Я работаю над приложением, в котором есть сервер, который загружает файлы на клиентское устройство, используя response.download(). (Я использую node.js, express и fs). Как только эти файлы загружены, они просто занимают место, поэтому я попытался позвонить fs.unlinksync после загрузки, чтобы избавиться от них. Но не повезло: я просто получаю следующую ошибку: NOENT: No such file or directory.

Вот соответствующий код на стороне сервера:

app.get("/file", function(request, response) {
  var filename = request.query.f;
  var filePath = "public/" + filename
  response.download(filePath);
//this is where I've tried putting fs.unlink
});

Любая помощь будет принята с благодарностью. Спасибо!

Ответы [ 2 ]

1 голос
/ 16 января 2020

response.download имеет функцию обратного вызова, вы можете удалить файл после загрузки, как показано ниже

response.download(filePath, yourFileName, function(err) {
  if (err) {
    console.log(err); // Check error if you want
  }
  fs.unlink(yourFilePath, function(){
      console.log("File was deleted") // Callback
  });

  // fs.unlinkSync(yourFilePath) // If you don't need callback
});
0 голосов
/ 16 января 2020

res.download() является асинхронным. Это означает, что он запускает операцию, а затем возвращается, поэтому, если вы попытаетесь удалить файл на следующей строке, операция загрузки еще не будет завершена. res.download() имеет дополнительный обратный вызов, который сообщит вам, когда операция будет завершена, и вы можете удалить файл в этом обратном вызове.

app.get("/file", function(request, response) {
  var filename = request.query.f;
  var filePath = "public/" + filename
  response.download(filePath, {dotfiles: "deny"}, function(err) {
     // the operation is done here          
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...