提供文件下载 封面
Vapor 大型教程

提供文件下载

网站离不开图片、样式表这些静态资源。本文用 Vapor 3 的 FileMiddleware 把 Public 目录变成文件服务根目录,轻松托管与下载文件。

一、什么是文件服务

几乎每一个网站都需要存放一些静态文件,例如图片和样式表文件。通常这需要 CDN 或 Nginx/Apache 来托管,而 Vapor 提供了 FileMiddleware 模块来完成这些事情。

要使用文件服务中间件,需要在 configure.swift 里注册它。默认使用 Public 目录作为文件服务的根目录,里面的文件可以是图片、样式表等:

...
    var middlewares = MiddlewareConfig() // Create _empty_ middleware config
    /// middlewares.use(FileMiddleware.self) // Serves files from `Public/` directory
    middlewares.use(ErrorMiddleware.self) // Catches errors and converts to HTTP response
    middlewares.use(FileMiddleware.self) //
    services.register(middlewares)
...
小提示:FileMiddleware 默认只服务 Public/ 目录。把文件放进这里,浏览器就能通过根路径直接访问,例如 /images/logo.png

二、在页面里引用静态文件

Public 目录下放置一张图片,比如 Public/images/logo.png,然后修改 index.leaf,用相对路径引用它:

...
<img src="/images/logo.png" class = "mx-auto d-block" alt="TIL Logo" />
<h1>Acronyms</h1>
...

这样首页就能显示这张 logo,浏览器访问 /images/logo.png 时,FileMiddleware 会自动把 Public/images/logo.png 返回给客户端——也就是「提供文件下载 / 资源服务」的效果。


本系列其他文章