Функция http.ServeFile
Функция http.ServeFile отправляет содержимое указанного файла или каталога в ответ на HTTP-запрос. Она принимает три параметра: ResponseWriter для записи ответа, Request с данными запроса и строку с путем к файлу. Функция автоматически определяет MIME-тип файла, устанавливает соответствующий заголовок Content-Type и обрабатывает условные запросы.
Синтаксис
http.ServeFile(w http.ResponseWriter, r *http.Request, name string)
Пример
Давайте создадим простой HTTP-сервер, который при обращении к корневому пути будет отдавать файл index.html:
package 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)
}
Результат выполнения кода:
"HTTP сервер запущен на порту 8080"
Пример
Давайте обработаем запросы к разным файлам в зависимости от пути URL:
package 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)
}
Результат выполнения кода:
"Файл успешно отправлен клиенту"
Пример
Давайте обработаем ситуацию, когда файл не найден, и вернем ошибку 404:
package 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)
}
Результат выполнения кода:
"404 page not found"
Смотрите также
-
функцию
http.ServeContent,
которая позволяет отправлять содержимое изio.ReadSeekerс контролем кэширования -
функцию
http.FileServer,
которая создает обработчик для раздачи файлов из заданной директории -
функцию
http.ListenAndServe,
которая запускает HTTP-сервер на указанном порту -
функцию
http.HandleFunc,
которая регистрирует обработчик для заданного маршрута