Static Files
See how to serve static files in Athenna REST API application.
Introduction
In Athenna you can use the response
object to serve static
files from a given directory.
Basic usage
Athenna uses the @fastify/static
plugins inside HttpKernel
. All the configurations that @fastify/static
supports can be set inside
Path.config('http.ts')
./src/config/http.ts
static
object.
import { Path } from '@athenna/common'
export default {
static: {
enabled: true,
root: Path.public(),
prefix: '/public/'
}
}
Now you can use the response.sendFile()
methods to serve
files from
Path.public()
./public
Route.get('/hello', ({ response }) => {
// Serve Path.public('image.png') directly
return response.sendFile('image.png') 👈
})
To serve a file from a different root location add the root path as second parameter:
Route.get('/hello', ({ response }) => {
return response.sendFile('image.png', Path.build()) 👈
})
You could also add options directly in the response:
Route.get('/hello', ({ response }) => {
return response.sendFile('image.png', {
cacheControl: false,
etag: true,
dotfiles: 'ignore',
lastModified: true
})
})
Custom file name
You can use the response.download()
to set a custom file name
by changing the content-disposition
header:
Route.get('/hello', ({ response }) => {
return response.download('image.png', 'custom-image.png') 👈
})
You could also add options directly in the response:
Route.get('/hello', ({ response }) => {
return response.download('image.png', 'custom-image.png', {
cacheControl: false,
etag: true,
dotfiles: 'ignore',
lastModified: true
})
})
Disabling static file server
The HttpKernel
class will automatically disable the
plugin registration if the package does not exist, so
to disable static file server in Athenna you need to
remove the @fastify/static
package from your
application:
npm remove @fastify/static
You can also disable by setting http.static.enabled
to false
:
export default {
static: {
enabled: false
}
}