Skip to content

Express response.sendFile

TIP

在给定的 path 传输文件。

Express
res.sendFile(path [, options] [, fn])

在给定的 path 传输文件。根据文件名的扩展名设置 Content-Type 响应 HTTP 标头字段。除非在选项对象中设置了 root 选项,否则 path 必须是文件的绝对路径。

此 API 提供对正在运行的文件系统上的数据的访问。确保 (a) 将 path 参数构造为绝对路径的方式在包含用户输入时是安全的,或者 (b) 将 root 选项设置为目录的绝对路径以包含其中的访问。

当提供 root 选项时,允许 path 参数为相对路径,包括包含 ..。Express 将验证作为 path 提供的相对路径将在给定的 root 选项中解析。

该方法在传输完成或发生错误时调用回调函数 fn(err)。如果指定了回调函数并且发生错误,则回调函数必须通过结束请求-响应循环或将控制权传递给下一个路由来显式处理响应过程。

属性描述默认可用性
maxAge设置 Cache-Control 标头的 max-age 属性(以毫秒为单位)或 ms 格式 中的字符串0
root相对文件名的根目录。
lastModified将 Last-Modified 标头设置为操作系统上文件的最后修改日期。设置 false 以禁用它。启用4.9.0+
headers包含与文件一起服务的 HTTP 标头的对象。
dotfiles提供点文件的选项。可能的值为 "allow"、"deny"、"ignore"。"ignore"
acceptRanges启用或禁用接受范围请求。true4.14+
cacheControl启用或禁用设置 Cache-Control 响应标头。true4.14+
immutable在 Cache-Control 响应标头中启用或禁用 immutable 指令。如果启用,还应指定 maxAge 选项以启用缓存。immutable 指令将阻止受支持的客户端在 maxAge 选项的生命周期内发出条件请求以检查文件是否已更改。false4.16+

这是一个使用 res.sendFile 及其所有参数的示例。

Express
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为服务文件提供细粒度支持

Express
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 。