问题背景
在 web 应用程序的开发中,文件下载是一个常见的需求。比如,我们可能需要在网站上提供一些 PDF 文件或者 ZIP 压缩包,供用户下载使用。在 Express.js 中,如何实现文件下载呢?
解决方案
在 Express.js 中,我们可以使用 res.download()
方法来实现文件下载。该方法会将指定的文件发送给客户端,并设置相应的 headers 以告诉浏览器该如何处理文件。
res.download(path[, filename][, options][, fn])
path
:要下载的文件路径。filename
:要显示给用户的文件名(可选)。options
:对象,用于配置下载选项(详见下文)。fn
:回调函数,用于在文件下载完成后执行一些操作(可选)。
下面是一个基本的例子。假设我们要提供一个名为 example.pdf
的 PDF 文件:
app.get('/download', function(req, res){ var filepath = "/path/to/example.pdf"; res.download(filepath); });
通过调用 res.download()
方法,我们将 example.pdf
文件发送给客户端。浏览器通常会根据文件扩展名进行相应的操作。比如,如果文件是 PDF 格式,浏览器可能会弹出一个对话框,让用户选择是直接下载文件还是在浏览器中打开文件。
高级配置
在上面的示例代码中,我们只提供了要下载的文件路径。但是,res.download()
方法还支持一些高级配置选项。下面是一些常用的选项:
headers
:一个对象,用于设置响应头信息。比如,我们可以通过该选项设置 Content-Disposition 头信息,以告诉浏览器下载该文件而不是尝试在浏览器中打开文件。示例代码如下:
res.download(filepath, "example.pdf", {headers: {"Content-Disposition": "attachment"}});
root
:一个字符串,表示要下载的文件的根目录。默认情况下,根目录是当前工作目录。示例代码如下:
res.download("example.pdf", {root: "/path/to/root"});
dotfiles
:一个字符串,用于设置如何处理点开头的文件或目录。默认情况下,不会处理点开头的文件或目录。示例代码如下:
res.download("example.pdf", {dotfiles: "allow"});
etag
:一个布尔值,用于启用或禁用 ETag 响应头信息。默认情况下,启用 ETag。示例代码如下:
res.download("example.pdf", {etag: false});
maxAge
:一个数字,用于设置缓存时间(单位是秒)。默认情况下,不缓存文件。示例代码如下:
res.download("example.pdf", {maxAge: 86400000});
除了上面列出的高级选项,res.download()
方法还有其他配置选项,如读取文件时的缓存大小、下载速度限制等等。详细信息请参考 Express.js 的文档。
总结
在本文中,我们介绍了如何在 Express.js 中实现文件下载。通过使用 res.download()
方法,我们可以轻松地将文件发送给客户端。同时,我们还讨论了一些高级配置选项,以帮助更好地控制文件下载。读者可以根据需要进行进一步学习和实践。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f03e3ef6b2d6eab3a340ea