Функция http.FileServer

Функция http.FileServer создает HTTP-обработчик, который обслуживает статические файлы из указанной директории. В первый параметр она принимает корневую файловую систему http.FileSystem, которая обычно создается с помощью функции http.Dir. Возвращаемый обработчик реализует интерфейс http.Handler и может быть передан в функции http.Handle или http.HandleFunc.

Синтаксис

gohttp.FileServer(root http.FileSystem) http.Handler

Пример

Давайте создадим простой файловый сервер для директории "./static":

gopackage main

import (
  "net/http"
)

func main() {
  fs := http.FileServer(http.Dir("./static"))
  http.Handle("/", fs)
  http.ListenAndServe(":8080", nil)
}

Результат выполнения кода:

go"Сервер запущен на порту 8080, файлы доступны по адресу http://localhost:8080"

В этом примере все файлы из директории ./static становятся доступными по корневому пути.

Пример

Давайте обслужем файлы по пути "/public", используя функцию http.StripPrefix:

gopackage main

import (
  "net/http"
)

func main() {
  fs := http.FileServer(http.Dir("./files"))
  http.Handle("/public/", http.StripPrefix("/public/", fs))
  http.ListenAndServe(":8080", nil)
}

Результат выполнения кода:

go"Сервер запущен, файлы доступны по адресу http://localhost:8080/public/"

Функция http.StripPrefix удаляет указанный префикс из URL-пути перед тем, как файл будет запрошен из директории.

Пример

Давайте создадим обработчик с кастомной корневой файловой системой:

gopackage main

import (
  "net/http"
  "os"
)

func main() {
  root := http.Dir("./assets")
  fs := http.FileServer(root)
  http.Handle("/assets/", http.StripPrefix("/assets/", fs))

  // Проверка существования директории
  if _, err := os.Stat("./assets"); os.IsNotExist(err) {
    panic("Директория ./assets не существует")
  }

  http.ListenAndServe(":8080", nil)
}

Результат выполнения кода:

go"Сервер запущен на порту 8080, файлы доступны по адресу http://localhost:8080/assets/"

В этом примере мы проверяем существование директории и обслуживаем файлы с префиксом /assets.

Смотрите также

  • функцию http.StripPrefix,
    которая удаляет префикс из пути запроса
  • функцию http.ServeFile,
    которая обслуживает отдельный файл по запросу
  • функцию http.ServeContent,
    которая обслуживает содержимое файла с поддержкой заголовков
  • функцию http.Handle,
    которая регистрирует обработчик для указанного паттерна