Простой способ отобразить файл изображения с разделом HTML-форм - PullRequest
0 голосов
/ 11 июня 2019

Я играл с многочисленными фрагментами сервера go, пытаясь выяснить, как я могу отобразить файл изображения в файле HTML или перейти к шаблону HTTP вместе с разделом HTML-форм.По сути, самая большая проблема, если я использую шаблон go, я не могу показать изображение вместе с html и при этом сохранить размер проекта небольшим.Кажется, единственный способ заставить шаблон работать - это организовать код в «типичный проект HTML», которого я стараюсь избегать.

Есть ли простой способ (всего пара файлов, а несоздание "типичной файловой структуры веб-проекта go") для отображения HTML с изображением внутри шаблона go?Я полагаю, что проблема ниже в основном с обработчиками http.Либо я могу иметь обработчик текста или обработчик изображения, но не оба?Мне нужно и то, и другое, чтобы я мог контролировать пользователя из формы HTML, какое изображение будет отображаться.

Если кто-то может помочь, я был бы очень признателен.

R Джо

-Пересмотрено Извините за то, что неясно.У меня ограниченный опыт работы с шаблонами go, и я видел много примеров, когда люди используют структуры файлов проекта go app, которые могут включать в себя такие каталоги, как шаблоны, img и т. Д. Эти каталоги часто бывают 10 или более.Затем они говорят об использовании маршрутов в приложениях и других вещах, в которые я не могу попасть.

Я просто смотрю на то, что хочу сделать, гораздо проще.У меня есть около 70 изображений.Я просто хочу, чтобы пользователь мог щелкнуть html-страницу с изображением и просто указать номер 1,2,3,4 в качестве обратной связи в зависимости от того, какое изображение отображается.

Я представлял, что одинПрограмма go (1 файл) может получить номер и после получения изменить img на html-странице или позволить пользователю щелкнуть следующую гиперссылку или что-то еще, чтобы вызвать следующее изображение, и после его завершения программа останавливается.

package main
import (

"fmt"
"html/template"
"log"
"net/http"
//"strings"



func img(w http.ResponseWriter, r *http.Request) {

//http.Handle("/images/", http.StripPrefix("/images/", http.FileServer(http.Dir("images/"))))

fmt.Println("method:", r.Method) //get request method

if r.Method == "GET" {
    t, _ := template.ParseFiles("image.gtpl")
    t.Execute(w, nil)
} else {
    r.ParseForm()
    // logic part of log in
    fmt.Println("previmage:", r.Form["previmage"])
    fmt.Println("nextimage:", r.Form["nextimage"])
}
}

func main() {

//http.HandleFunc("/", sayhelloName) // setting router rule
http.HandleFunc("/login", login)
err := http.ListenAndServe(":9090", nil) // setting listening port
if err != nil {
    log.Fatal("ListenAndServe: ", err)
}
}

<html>
<head>
<title></title>
</head>
<body> //How to Loop Images based on user submit??
<img src="img/question4.png" alt="Cannot load image" style="width: 800px;height: 800px">
    <form action="/login" method="post">
        Username:<input type="text" name="previmage">
        Password:<input type="password" name="nextimage">
        <input type="submit" value="Login">
    </form>
</body>
</html>

1 Ответ

0 голосов
/ 12 июня 2019

У вас есть http.Handle вызов, который регистрирует обработчик, внутри обработчика . Это означает, что каждый раз, когда приходит запрос, он пытается зарегистрировать обработчик снова . Это недопустимо (отсюда и ошибка, которая явно говорит о том, что вы не можете перерегистрировать тот же маршрут). Вы должны зарегистрировать его там же, где вы регистрируете обработчик для шаблона, то есть в main:

func main() {
    http.HandleFunc("/login", login)
    // Register handler correctly
    // I changed the route to /img/ to match what you're using in your HTML
    http.Handle("/img/", http.StripPrefix("/img/", http.FileServer(http.Dir("images/"))))
    err := http.ListenAndServe(":9090", nil) // setting listening port
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}
...