В этой главе рассматривается фреймворк Go Iris и способы работы со статическими файлами. Иногда в проекте есть необходимость напрямую предоставлять доступ к некоторым статическим файлам пользователям. Каким образом это можно настроить?
Iris предоставляет статические файлы
func main() {
app := iris.New()
// Установка иконки страницы
app.Favicon("./resources/favicon.ico")
// Установка пути для статических файлов и привязка URL-маршрута
app.HandleDir("/assets", iris.Dir("./assets"))
app.Listen(":8080")
}
Метод HandleDir принимает третий опциональный параметр DirOptions:
type DirOptions struct {
// По умолчанию "/"index.html". Если запрашиваемый путь оканчивается **/*/$IndexName, происходит перенаправление на **/*(/),
// что приводит к обработке другим обработчиком, автоматически зарегистрированным фреймворком в качестве обработчика индекса,
// если конечный разработчик не обработал это вручную.
IndexName string
// PushTargets файлы (соответствующие значения) для обслуживания без дополнительных клиентских запросов (HTTP/2 Push), когда конкретный запрашиваемый путь (ключ отображения без префикса)
// запрашиваемый путь (ключ отображения без префикса) не является каталогом (это `IndexFile`) или когда следует.
// PushTargetsRegexp подобно `PushTargets`, но принимает регулярное выражение, которое будет сравниваться со всеми файлами в каталоге (рекурсивно).
// `IndexName` должен быть установлен.//
// Пример
// "/": regexp.MustCompile("((.*).js|(.*).css|(.*).ico)$")
// См. также `iris.MatchCommonAssets`.
PushTargetsRegexp map[string]*regexp.Regexp
// Кэширование для включения кэша в памяти и предварительно сжатых файлов.
Cache DirCacheOptions
// Когда файлы должны обслуживаться в сжатом состоянии.
Compress bool
// Перечислить файлы в текущем запрошенном каталоге, если `IndexName` не найден.
ShowList bool
// Если `ShowList` равно true, то эта функция будет использоваться для отображения списка файлов текущего запрошенного каталога (dir)
// вместо стандартного.
DirList DirListFunc
// Загрузить и сохранить в локальные файлы.
Attachments Attachments
// Опциональный валидатор для использования при проходе через каждый запрашиваемый ресурс.
AssetValidator func(ctx *context.Context, name string) bool
}