# res.sendFile
在给定的
path
传输文件。
# 概要
res.sendFile(path [, options] [, fn])
# 描述
Express v4.8.0 及更高版本支持
res.sendFile()
。
在给定的 path
传输文件。根据文件名的扩展名设置 Content-Type
响应 HTTP 标头字段。除非在选项对象中设置了 root
选项,否则 path
必须是文件的绝对路径。
此 API 提供对正在运行的文件系统上的数据的访问。确保 (a) 将
path
参数构造为绝对路径的方式在包含用户输入时是安全的,或者 (b) 将root
选项设置为目录的绝对路径以包含其中的访问。
当提供 root
选项时,允许 path
参数为相对路径,包括包含 ..
。Express 将验证作为 path
提供的相对路径将在给定的 root
选项中解析。
下表提供了有关 options
参数的详细信息。
属性 | 描述 | 默认 | 可用性 |
---|---|---|---|
maxAge | 设置 Cache-Control 标头的 max-age 属性(以毫秒为单位)或 ms 格式 中的字符串 | 0 | |
root | 相对文件名的根目录。 | ||
lastModified | 将 Last-Modified 标头设置为操作系统上文件的最后修改日期。设置 false 以禁用它。 | 启用 | 4.9.0+ |
headers | 包含与文件一起服务的 HTTP 标头的对象。 | ||
dotfiles | 提供点文件的选项。可能的值为 "allow"、"deny"、"ignore"。 | "ignore" | |
acceptRanges | 启用或禁用接受范围请求。 | true | 4.14+ |
cacheControl | 启用或禁用设置 Cache-Control 响应标头。 | true | 4.14+ |
immutable | 在 Cache-Control 响应标头中启用或禁用 immutable 指令。如果启用,还应指定 maxAge 选项以启用缓存。immutable 指令将阻止受支持的客户端在 maxAge 选项的生命周期内发出条件请求以检查文件是否已更改。 | false | 4.16+ |
该方法在传输完成或发生错误时调用回调函数 fn(err)
。如果指定了回调函数并且发生错误,则回调函数必须通过结束请求-响应循环或将控制权传递给下一个路由来显式处理响应过程。
这是一个使用 res.sendFile
及其所有参数的示例。
app.get('/file/:name', (req, res, next) => {
const options = {
root: path.join(__dirname, 'public'),
dotfiles: 'deny',
headers: {
'x-timestamp': Date.now(),
'x-sent': true
}
}
const fileName = req.params.name
res.sendFile(fileName, options, (err) => {
if (err) {
next(err)
} else {
console.log('Sent:', fileName)
}
})
})
以下示例说明了使用 res.sendFile
为服务文件提供细粒度支持:
app.get('/user/:uid/photos/:file', (req, res) => {
const uid = req.params.uid
const file = req.params.file
req.user.mayViewFilesFrom(uid, (yes) => {
if (yes) {
res.sendFile(`/uploads/${uid}/${file}`)
} else {
res.status(403).send("Sorry! You can't see that.")
}
})
})
如需更多信息,或者如果您有问题或疑虑,请参阅 send
。