Функция http.ServeFile

Функция http.ServeFile отправляет содержимое указанного файла или каталога в ответ на HTTP-запрос. Она принимает три параметра: ResponseWriter для записи ответа, Request с данными запроса и строку с путем к файлу. Функция автоматически определяет MIME-тип файла, устанавливает соответствующий заголовок Content-Type и обрабатывает условные запросы.

Синтаксис

gohttp.ServeFile(w http.ResponseWriter, r *http.Request, name string)

Пример

Давайте создадим простой HTTP-сервер, который при обращении к корневому пути будет отдавать файл index.html:

gopackage main

import (
  "net/http"
)

func main() {
  http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    http.ServeFile(w, r, "index.html")
  })

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

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

go"HTTP сервер запущен на порту 8080"

Пример

Давайте обработаем запросы к разным файлам в зависимости от пути URL:

gopackage main

import (
  "net/http"
  "strings"
)

func main() {
  http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    if r.URL.Path == "/" {
      http.ServeFile(w, r, "index.html")
      return
    }

    path := strings.TrimPrefix(r.URL.Path, "/")
    http.ServeFile(w, r, path)
  })

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

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

go"Файл успешно отправлен клиенту"

Пример

Давайте обработаем ситуацию, когда файл не найден, и вернем ошибку 404:

gopackage main

import (
  "net/http"
  "os"
)

func main() {
  http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    path := r.URL.Path[1:]

    if _, err := os.Stat(path); os.IsNotExist(err) {
      http.NotFound(w, r)
      return
    }

    http.ServeFile(w, r, path)
  })

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

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

go"404 page not found"

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

  • функцию http.ServeContent,
    которая позволяет отправлять содержимое из io.ReadSeeker с контролем кэширования
  • функцию http.FileServer,
    которая создает обработчик для раздачи файлов из заданной директории
  • функцию http.ListenAndServe,
    которая запускает HTTP-сервер на указанном порту
  • функцию http.HandleFunc,
    которая регистрирует обработчик для заданного маршрута