Я пытаюсь обслуживать папку в корне моего приложения под названием assets
. Я хочу, чтобы все файлы и подпапки внутри были доступны через URL-адрес /details/
.
fs := http.FileServer(http.Dir("assets"))
http.Handle("/details/", http.StripPrefix("/details/", fs))
Я до сих пор получаю 404 за все. Я неправильно использую StripPrefix
?
Для ясности предположим, что assets
содержит test.json
. Я хочу, чтобы это было доступно по URL-адресу /details/test.json
.
В качестве теста попробуйте указать абсолютный путь к каталогу ресурсов. Выше приведен относительный путь — и если ваш сервер go не находится в том же каталоге, он его не найдет.
@Abdullah, путь обработчика /details/
правильный
@colminator Абсолютный путь не помог.
есть ли проблема с правами пользователя? т. е. какой пользователь запускает go-сервер и какой файл принадлежит каталогу активов? Упростите тестирование, указав на /tmp/assets и сделав все файлы/каталоги «r-x»
@colminator не должен быть проблемой разрешения, я просто запускаю его локально.
Нет проблем с кодом, который вы разместили. Я запустил его, и он работает просто хорошо. Убедитесь, что в вашем URL нет опечатки
В приведенных выше комментариях дважды проверьте свои пути, разрешения, пользовательские контексты и т. д.
Если вы все еще застряли, начните с этой базовой настройки:
package main
import (
"log"
"net/http"
)
func main() {
fs := http.FileServer(http.Dir("/tmp/assets"))
http.Handle("/details/", http.StripPrefix("/details/", fs))
log.Fatal(
http.ListenAndServe(":8080", nil),
)
}
И проверьте с помощью завитка и т.д.
$ find /tmp/assets
/tmp/assets
/tmp/assets/test.json
$ go run ./main.go
$ curl localhost:8080/details/
<pre>
<a href = "test.json">test.json</a>
</pre>
Попробуйте
./details/
вместо/details/