在node.js中使用response.download()后如何删除文件?

4
我正在开发一款应用程序,其中有一个服务器使用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个回答

18

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
});

我尝试了这个,得到了 TypeError [ERR_INVALID_CALLBACK]: Callback must be a function - TheDeveloperNextDoor
它没有在给定的路径中删除文件。 - s.j
这在基于Chromium的移动浏览器中不起作用,因为用户会提示下载选项。 - amarinediary

4

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          
  });
});

@s.j - 这个问题或答案与删除文件有什么关系?如果您有关于删除的问题,请提出您自己的问题。 - jfriend00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接