📜  Express.js res.download()函数(1)

📅  最后修改于: 2023-12-03 15:30:41.528000             🧑  作者: Mango

Express.js res.download()函数

res.download()是Express.js框架中的一个响应函数,用于将文件作为附件下载到客户端。本文将对res.download()函数做详细介绍。

语法

res.download(path [, filename] [, options] [, callback])

  • path:要下载的文件路径。这个路劲是相对于服务端的工作目录(一般为应用程序的根目录)的相对路径。

  • filename(可选):指定下载时客户端浏览器保存的文件名。如果缺省,将使用path中的文件名作为默认名称。

  • options(可选):一个包含以下属性的对象:

    • headers:一个对象,其中包含要设置的响应头。
    • root:下载文件的基础目录,默认是应用程序根目录。
    • dotfiles:指示是否包括点文件(文件名以“.”开头的文件),默认是“ignore”。
    • acceptRanges:指示是否输出Accept-Ranges响应头,以指示客户端可以请求资源的部分内容,默认是“true”。
    • lastModified:指定最后修改文件的时间,这个时间将用于检测文件是否过期。
    • etag:指定实体标签(ETag)响应头字段的值,以便对请求资源进行缓存验证。
  • callback(可选):回调函数,当下载完成时调用,其中包含一个错误参数。

用法

要下载一个文件,只需要使用res.download()函数。例如:

app.get('/download', function(req, res){
  const filePath = "/public/downloads/sample.pdf";
  res.download(filePath);
});

上面的代码会将文件“sample.pdf”作为附件下载到客户端。在浏览器的下载目录中,你将看到一个“sample.pdf”文件。

如果想要更改文件名,只需在调用res.download()时传递第二个参数,如下所示:

app.get('/download', function(req, res){
  const filePath = "/public/downloads/sample.pdf";
  const fileName = "downloaded-file-name.pdf";
  res.download(filePath, fileName);
});

在这种情况下,文件将被下载并保存为“downloaded-file-name.pdf”。

你还可以为下载指定响应头。例如,要指定MIME类型,只需在输出标题中添加类型即可。在以下示例中,我们将同时指定MIME类型和文件名。

app.get('/download', function(req, res){
  const filePath = "/public/downloads/sample.pdf";
  const fileName = "downloaded-file-name.pdf";
  res.set({
    "Content-Disposition": "attachment; filename="+fileName,
    "Content-Type": "application/pdf"
  });
  res.download(filePath);
});
流程图

我们可以通过以下流程图来更好地理解res.download()函数的工作原理。

graph TD
A{发送 HTTP 请求}
B{发起路由请求}
C{发现匹配路由}
D{处理路由中间件}
E{调用res.download()函数}
F{查找文件}
G{设置响应头}
H{传输文件}
A-->B
B-->C
C-->D
D-->E
E-->F
F-->G
G-->H
H-->A
结论

res.download()函数是Express.js框架中非常有用的一个函数,它可以让我们轻松地从服务端下载文件。我们可以使用它的可选参数选项来更好地控制我们的下载。尽管它不像其他函数那么常用,但它一旦用起来,你会惊讶地发现它有多么方便和实用。